use*_*000 4 python django templates jinja2
我有存储在 Django 模型中的 URL,我想将其显示在模板上,但我只想显示如下所示的域:
原始网址:
https://wikipedia.org/wiki/List_of_chemical_process_simulators
Run Code Online (Sandbox Code Playgroud)
展示:
wikipedia.org/...
Run Code Online (Sandbox Code Playgroud)
完全在后端、字体端或使用 jinja2 的自定义函数来处理这个问题会更好吗?
如果您稍后会在整个项目的模板中重用它,并且考虑到涉及的逻辑非常简单,那么在这里定义自定义模板过滤器就完全可以了。
用于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/...'
Run Code Online (Sandbox Code Playgroud)
这是一个简单的示例,您应该另外提供错误处理机制,以防urlparse()解析传入的 url 失败。
最好的方法可能是 @alecxe 回答的自定义模板过滤器,但如果您不能,这里有一个非万无一失的方法供将来参考。
\n\n{{ original_url.rpartition("//")[-1] }}\nRun Code Online (Sandbox Code Playgroud)\n\nhttps://wikipedia.org/wiki/List_of_chemical_process_simulators \xe2\x86\x92 wikipedia.org/wiki/List_of_chemical_process_simulators//example.net/path/to/file \xe2\x86\x92 example.net/path/to/fileftp://example.net/pub \xe2\x86\x92 example.net/pub仅获取域名(主机名):
\n\n{{ original_url.rpartition("//")[-1].partition("/")[0] }}\nRun Code Online (Sandbox Code Playgroud)\n\nhttps://wikipedia.org/wiki/List_of_chemical_process_simulators \xe2\x86\x92 wikipedia.org//example.net/path/to/file \xe2\x86\x92 example.netftp://example.net/pub \xe2\x86\x92 example.net