使用jinja2仅显示URL域的最佳方式

时间:2014-12-29 21:31:53

标签: python django templates jinja2

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

original_url:

https://wikipedia.org/wiki/List_of_chemical_process_simulators

显示:

wikipedia.org/...

使用jinja2完全在后端,font-end或自定义函数上处理它会更好吗?

2 个答案:

答案 0 :(得分:3)

如果以后你会在整个项目的模板中重复使用它,并考虑到涉及一个非常简单的逻辑,那么定义一个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,则应另外提供错误处理机制。

答案 1 :(得分:2)

最好的方法可能是@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