【问题标题】:Best way to display only URL domain using jinja2使用 jinja2 仅显示 URL 域的最佳方法
【发布时间】:2015-02-26 01:55:27
【问题描述】:

我有存储在 Django 模型中的 URL,我想在模板上显示,但我只想像这样显示域:

原始网址:

https://wikipedia.org/wiki/List_of_chemical_process_simulators

显示:

wikipedia.org/...

完全在后端、字体端或使用 jinja2 的自定义函数上处理这个会更好吗?

【问题讨论】:

    标签: python django templates jinja2


    【解决方案1】:

    最好的方法可能是@alecxe 回答的自定义模板过滤器,但如果你不能,这里有一个非万无一失的方法供将来参考。

    {{ original_url.rpartition("//")[-1] }}
    
    • https://wikipedia.org/wiki/List_of_chemical_process_simulators → wikipedia.org/wiki/List_of_chemical_process_simulators
    • //example.net/path/to/file → example.net/path/to/file
    • ftp://example.net/pub → example.net/pub

    只获取域名(主机名):

    {{ original_url.rpartition("//")[-1].partition("/")[0] }}
    
    • https://wikipedia.org/wiki/List_of_chemical_process_simulators → wikipedia.org
    • //example.net/path/to/file → example.net
    • ftp://example.net/pub → example.net

    【讨论】:

      【解决方案2】:

      如果您稍后会在整个项目的模板中重用它,并且考虑到其中涉及的逻辑非常简单,那么在这里定义 custom template filter 是完全可以的。

      使用urlparse.urlparse()获取域名:

      >>> from urlparse import urlparse
      >>> from jinja2 import Environment, Template
      >>>
      >>> def get_domain(url):
      ...     return "%s/..." % urlparse(url).netloc
      ... 
      >>>
      >>> env = Environment()
      >>> env.filters['domain'] = get_domain
      >>>
      >>> template = env.from_string('{{ url|domain }}')
      >>> template.render(url='https://wikipedia.org/wiki/List_of_chemical_process_simulators')
      u'wikipedia.org/...'
      

      这是一个简单的例子,你应该额外提供一个错误处理机制,以防urlparse()解析传入的url失败。

      【讨论】:

        猜你喜欢
        • 2013-05-15
        • 2019-01-23
        • 1970-01-01
        • 2020-02-19
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 2016-08-06
        相关资源
        最近更新 更多