Flask 和 jinja2 的 include 标签
如何在jinja2中使用“include标签”。我需要在基础模板中输出一块文章内容,并且这些内容在子模板中也能使用。
views.py
Articles.query.filter_by(name=name).first()
base.html
{% block content %}
Content base
{% endblock %}
---{{ this_articles_tag }}----
children.html
{% extends 'base.html' %}
{% block content %}
Content children
{% endblock %}
---{{ output Articles }}----
在Django中,这个“include标签”,在jinja2中该怎么做呢?(不使用context_processor)
1 个回答
2
如果你想在一个模板里包含另一个模板,可以在Jinja中使用include。不过如果你说的是模板标签(在Django中我记得我很喜欢这些),那么在Flask中,只有你提到的上下文处理器是可行的。我觉得这其实也没什么不好。
编辑:
注册上下文处理器作为函数的最简单方法可以在文档中找到。
但如果你想要一些更高级的功能,比如动态加载,或者你想从不同的地方加载你的函数,那么你可以定义自己的装饰器函数,这个函数基本上是用来包装返回字典的函数:
def example_templatetag():
def get_something():
return get_want_you_want_from_db()
return dict(get_something=get_something)
然后在你创建Flask应用对象的地方,你可以很容易地注册这个函数:
app.context_processor(example_templatetag)
接着在模板中你可以这样使用:
{% set data_you_wanted=get_something() %}
{{ data_you_wanted }}
不过也许对你来说,文档中提到的方法就已经足够了;)