1 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
編輯:剛剛注意到您的示例包含一個(gè)簡(jiǎn)化但格式錯(cuò)誤的 URL。這個(gè)更簡(jiǎn)單的模板標(biāo)簽適用于“www.google.com”格式的網(wǎng)址:
@register.simple_tag()
def get_domain_name_from_url(url):
return url.split('.')[-2]
如果您執(zhí)意要在模板中執(zhí)行此操作,則可以創(chuàng)建自定義模板標(biāo)記:
只要您的網(wǎng)址格式正確(例如“https://www.google.com/”),這應(yīng)該可以解決問(wèn)題:
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
怎么運(yùn)行的:
urlparse
將域解析為一個(gè)包含 6 項(xiàng)的命名元組。第二個(gè)元組項(xiàng) (
parsed_url[1]
) 是包含 URL 的網(wǎng)絡(luò)位置部分的字符串(例如"www.google.com"
)使用 將字符串拆分為其組成部分
split('.')
,并返回列表中的倒數(shù)第二項(xiàng) ("google"
)。通過(guò)獲取 TLD ( ) 之前的部分.com
,我們可以避免從頭開(kāi)始工作時(shí)出現(xiàn)的任何問(wèn)題。(例如,如果 URL 不包含www
,我們將需要列表中的第一項(xiàng),而不是第二項(xiàng)。通過(guò)從 TLD 開(kāi)始并使用反向詞,我們應(yīng)該始終獲得域名。)
將代碼保存在名為[your_django_project]/[your_app]/templatetags/get_domain_name.py
.
確保該應(yīng)用程序位于您的INSTALLED_APPS
in中settings.py
。
重新啟動(dòng)服務(wù)器。(不要忘記這部分。服務(wù)器在啟動(dòng)時(shí)會(huì)注冊(cè)您的模板標(biāo)簽。)
現(xiàn)在,在您的模板中,您可以加載代碼:
{% load get_domain_name %} {% get_domain_name_from_url x.LINK %}
添加回答
舉報(bào)