【发布时间】:2015-07-28 07:49:09
【问题描述】:
我想在 Jinja 中实现与 Django 模板的自定义标签类似的功能。
在 Django 模板中,要让服务器端函数返回一个字符串并将其插入到模板中,您可以执行以下简单操作:
from django import template
register = template.Library()
@register.inclusion_tag('app/gallery.html')
def get_gallery(active=None):
### do complex server side things, etc.
context_dict = {
...
}
return context_dict
现在,调用它就像
一样简单{% load app_tags %}
{% get_gallery 'home' %}
这对我来说似乎足够清晰和简单。
现在我的问题是:即使在阅读了 Jinja2 文档的所有部分之后,我也看不出应该如何在 Jinja 中实现类似的功能。我已经看到 Jinja 支持宏、调用、导入、自定义测试、自定义过滤器,但我看不到任何与使用任意服务器端 Python 代码定义自定义标签相关的内容。
我见过的最接近的是自定义过滤器,但是当用于类似标记的目的时,它的语法很奇怪:要调用tag(param1, param2),您需要编写param1|tag(param2)。另外,我看不出它如何用于无参数函数。
还有完整的扩展支持,但由于simplest example 在文档中占用了 56 行代码,这似乎过于复杂。
你能解释一下你是如何解决这个问题的吗?无论是在独立的 Jinja2 环境(想想静态站点生成)还是在新的 Django 版本(1.8+)下?
【问题讨论】: