Flask局部视图的项目列表

时间:2013-03-26 07:17:42

标签: python-2.7 flask jinja2

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

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

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

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

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

感谢。

修改

"其他模板上下文"我可以导出一个从数据库加载数据并在" latest_articles.html"中访问它的函数。模板。

还有其他办法吗?

2 个答案:

答案 0 :(得分:4)

您可以添加additional template context

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

对于模板代码,您可以使用macrosinclude

<强> UPD:

首先尝试使用template inheritance,如果您的网页允许,请将您的类别列表或最近的文章放在基本模板中。

您也可以使用`@ 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()),
    }

答案 1 :(得分:1)

我这种东西的常用解决方案是使用prepare函数的类继承,请参考我在其他帖子中的答案:

不同的问题,同样的解决方案。 Dynamic navigation in Flask