我一直在用烧瓶和SqlAlchemy建立一个博客引擎,我已经达到了以下几点:
我的问题是:
有没有办法可以将一组变量传递给烧瓶应用中的每个视图,而不必在
render_template()
调用中传递它们?
答案 0 :(得分:2)
导入侧边栏和其他重复元素的传统方式是导入到您的页面模板继承的布局模板中。例如:
<强>的layout.html:强>
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
{% include sidebar.html %}
{% block body %}
{% endblock body %}
</body>
</html>
<强> post.html:强>
{% extends "layout.html" %}
{% block body %}
{{ post }}
{% endblock %}
你也可以创建一个像这样的全局函数:
def createNav():
nav = '''
<ul class="nav">
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
'''
return nav
#make function available inside jinja template
app.jinja_env.globals.update(createNav=createNav)
然后这样打电话:
<强> post.html:强>
{% extends "layout.html" %}
{% block body %}
{{ createNav() }}
{{ post }}
{% endblock %}
答案 1 :(得分:2)
为模板提供一组变量的最简单方法是将它们添加到flask.g
。
例如,您可以拥有g.left_sidebars
,g.right_sidebars
和g.footer
,每个数组都包含您正在使用的变量。这些变量可以预先渲染HTML(如果可能的话可以缓存以避免每次都渲染它们),或者它们可以是要包含的子模板的名称。
由于flask.g
自动可用于模板,所以您需要做的就是在每个请求期间或before_request
处理程序中填充这些数组。