在许多模板中包含侧边栏的正确方法?

Correct way to include a sidebar across many templates?

我正在尝试找出最好的方法来包含一些将在我的几乎每个模板上使用的边栏代码。比如我的index.html

{% extends "base.html" %}
    Hello, ...
    {% include 'sidebar.html' %}
{% endblock %}

观点是:

@app.route('/')
@app.route('/index')
def index():
    # some stuff for my index page...
    form_sidebar = sidebar()
    return render_template('index.html', indexdata=indexdata, form_sidebar=form_sidebar)

我的边栏表单是用

创建的
def sidebar():
    form_sidebar = MySideBarForm()  # defined in forms.py
    # do some sql stuff to initialize the form ...
    return form_sidebar

我的 sidebar.html 使用从 sidebar() 收到的数据。

如果我继续以这种方式继续,那么我的每个视图函数都必须调用 sidebar(),它们都必须传递变量 form_sidebar,并且每个模板都需要 {% include 'sidebar.html' %}。有一个更好的方法吗?我认为理想情况下我的 base.html{% include 'sidebar.html,但我不知道如何为它提供 form_sidebar 数据。

您可以将您的 form_sidebar 包含在全局 g 中,如果我没记错的话,它在模板中隐式可用。

要提供 g,您可以在 @before_request 修饰函数中全局执行,在基本模板中包含边栏模板应该可以完成这项工作。