为了账号安全,请及时绑定邮箱和手机立即绑定

Django:使用 python 方法

Django:使用 python 方法

潇湘沐 2023-08-22 10:37:38
我正在尝试截断正在填充到 html 表中的网址,如下所示:{% for x in queryset %} <tr>  <td>{{x.LINK}}</td> </tr>这样 ie 'www.google.com' 就变成 'google'。如何实现?在 python 中,方法很简单.split('.'),但在这里我很困惑。或者也许在 django 中查询数据之前完成所有数据修改会更简单?
查看完整描述

1 回答

?
ABOUTYOU

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

怎么运行的:

  1. urlparse将域解析为一个包含 6 项的命名元组。

  2. 第二个元组项 ( parsed_url[1]) 是包含 URL 的网络位置部分的字符串(例如"www.google.com"

  3. 使用 将字符串拆分为其组成部分split('.'),并返回列表中的倒数第二项 ( "google")。通过获取 TLD ( ) 之前的部分.com,我们可以避免从头开始工作时出现的任何问题。(例如,如果 URL 不包含www,我们将需要列表中的第一项,而不是第二项。通过从 TLD 开始并使用反向词,我们应该始终获得域名。)

将代码保存在名为[your_django_project]/[your_app]/templatetags/get_domain_name.py.

确保该应用程序位于您的INSTALLED_APPSin中settings.py

重新启动服务器。(不要忘记这部分。服务器在启动时会注册您的模板标签。)

现在,在您的模板中,您可以加载代码:

{% load get_domain_name %}
{% get_domain_name_from_url x.LINK %}


查看完整回答
反对 回复 2023-08-22
  • 1 回答
  • 0 关注
  • 48 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信