1 回答
TA贡献1812条经验 获得超5个赞
编辑:刚刚注意到您的示例包含一个简化但格式错误的 URL。这个更简单的模板标签适用于“www.google.com”格式的网址:
@register.simple_tag()
def get_domain_name_from_url(url):
return url.split('.')[-2]
如果您执意要在模板中执行此操作,则可以创建自定义模板标记:
只要您的网址格式正确(例如“https://www.google.com/”),这应该可以解决问题:
from django import template
register = template.Library()
from urllib.parse import urlparse
@register.simple_tag()
def get_domain_name_from_url(url):
parsed_url = urlparse(url)
netloc = parsed_url[1]
domain_name = netloc.split('.')[-2]
return domain_name
怎么运行的:
urlparse
将域解析为一个包含 6 项的命名元组。第二个元组项 (
parsed_url[1]
) 是包含 URL 的网络位置部分的字符串(例如"www.google.com"
)使用 将字符串拆分为其组成部分
split('.')
,并返回列表中的倒数第二项 ("google"
)。通过获取 TLD ( ) 之前的部分.com
,我们可以避免从头开始工作时出现的任何问题。(例如,如果 URL 不包含www
,我们将需要列表中的第一项,而不是第二项。通过从 TLD 开始并使用反向词,我们应该始终获得域名。)
将代码保存在名为[your_django_project]/[your_app]/templatetags/get_domain_name.py
.
确保该应用程序位于您的INSTALLED_APPS
in中settings.py
。
重新启动服务器。(不要忘记这部分。服务器在启动时会注册您的模板标签。)
现在,在您的模板中,您可以加载代码:
{% load get_domain_name %} {% get_domain_name_from_url x.LINK %}
添加回答
举报