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 %}
添加回答
舉報