2

如果在网站的大多数页面上我都有从数据库加载的类别或最近文章的列表 - 我如何避免使用 flask 和 jinja2 重复代码?

现在的方式是,我有一个 html 文件,其中包括:

{% include '/root/latest_articles.html' %}

然后每个视图都必须将参数(文章列表)传递给模板。我想避免这种情况。

在 Flask 中实现这一目标的最佳方法是什么?

谢谢。

编辑

“附加模板上下文”将起作用..我可以导出一个从数据库加载数据并在“latest_articles.html”模板中访问它的函数。

还有其他方法吗?

4

2 回答 2

5

您可以添加其他模板上下文

@app.context_processor
def additional_context():
    return {
        'content': get_page_content_context(request.endpoint, g.language),
        'hot_links': get_hot_links(),
    }

对于模板代码,您可以使用包含.

升级版:

首先尝试使用模板继承并将您的类别列表或最近的文章放在基本模板中,如果您的页面允许这样做。

您也可以使用 `@app.context_processor' 使模板代码可变,但我认为这不是一个好主意:

@app.context_processor
def additional_context():
    return {
        'recent_articles_markup': do_mark_safe(render_template(
            'root/latest_articles.html', articles=get_recent_articles()),
    }
于 2013-03-26T08:47:55.160 回答
1

对于这类东西,我通常的解决方案是使用准备函数进行类继承,请参阅我在其他线程中的回答:

不同的问题,相同的解决方案。 Flask 中的动态导航

于 2013-03-26T22:08:39.277 回答