Python 使用jinja2仅显示URL域的最佳方式
我想在模板上显示Django模型中存储的URL,但我只想如下显示域: 原始url:Python 使用jinja2仅显示URL域的最佳方式,python,django,templates,jinja2,Python,Django,Templates,Jinja2,我想在模板上显示Django模型中存储的URL,但我只想如下显示域: 原始url: https://wikipedia.org/wiki/List_of_chemical_process_simulators 显示: wikipedia.org/... 在后端、字体端或jinja2上的自定义函数上完全处理这个问题会更好吗?如果您以后会在整个项目的模板中重用它,并且考虑到涉及到一个非常简单的逻辑,在这里定义a是完全可以的 用于获取域名: >>> from urlparse i
https://wikipedia.org/wiki/List_of_chemical_process_simulators
显示:
wikipedia.org/...
在后端、字体端或jinja2上的自定义函数上完全处理这个问题会更好吗?如果您以后会在整个项目的模板中重用它,并且考虑到涉及到一个非常简单的逻辑,在这里定义a是完全可以的 用于获取域名:
>>> 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失败,您应该另外提供一个错误处理机制。最好的方法可能是@alecxe回答的自定义模板过滤器,但如果您不能,这里有一个非傻瓜式的方法供将来参考
{{ original_url.rpartition("//")[-1] }}
https://wikipedia.org/wiki/List_of_chemical_process_simulators → wikipedia.org/wiki/List\u of\u chemical\u process\u Simulator
//example.net/path/to/file→ 示例.net/path/to/file
ftp://example.net/pub → 示例.net/pub
https://wikipedia.org/wiki/List_of_chemical_process_simulators → 维基百科.org
//example.net/path/to/file→ 示例.net
ftp://example.net/pub → 示例.net
{{ original_url.rpartition("//")[-1].partition("/")[0] }}