Django:使用python方法

Django:使用python方法,python,django,methods,Python,Django,Methods,我试图截断正在填充到html表中的URL,如下所示: {% for x in queryset %} <tr> <td>{{x.LINK}}</td> </tr> {%x在queryset%} {{x.LINK} 因此,即“www.google.com”变成了“google”。如何实现?在python中,使用.split('.')方法是很简单的,但这里我感到困惑。 或者在django中查询数据之前进行所有数据修改会更简单?编辑:刚刚注意到您的

我试图截断正在填充到html表中的URL,如下所示:

{% for x in queryset %}
<tr> 
<td>{{x.LINK}}</td>
</tr>
{%x在queryset%}
{{x.LINK}
因此,即“www.google.com”变成了“google”。如何实现?在python中,使用
.split('.')
方法是很简单的,但这里我感到困惑。
或者在django中查询数据之前进行所有数据修改会更简单?

编辑:刚刚注意到您的示例包含一个简化但格式错误的URL。这个更简单的模板标签适用于格式类似“www.google.com”的URL:

@register.simple_tag()
def get_domain_name_from_url(url):
    return url.split('.')[-2]

如果您一心想在模板中执行此操作,则可以自定义:

只要您的URL格式正确(例如“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
    将域解析为一个名为tuple的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
    的文件中

    确保应用程序位于
    设置.py中的
    已安装的应用程序中

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

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

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

    您应该能够在
    {%%}
    块中使用几乎所有有效的Python