我有一个存储在Django模型中的URL,我想在模板上显示,但我只想显示这样的域:
original_url:
https://wikipedia.org/wiki/List_of_chemical_process_simulators
显示:
wikipedia.org/...
使用jinja2完全在后端,font-end或自定义函数上处理它会更好吗?
答案 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