【问题标题】:Flask partial view for a list of items项目列表的烧瓶部分视图
【发布时间】:2013-03-26 07:17:42
【问题描述】:

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

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

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

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

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

谢谢。

编辑

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

还有其他方法吗?

【问题讨论】:

    标签: python-2.7 flask jinja2


    【解决方案1】:

    你可以加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()),
        }
    

    【讨论】:

    • 还可以考虑使用模板继承而不是包含。
    【解决方案2】:

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

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

    【讨论】:

    • 很酷,谢谢 - 我一定也会研究您的解决方案。
    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2013-07-27
    • 1970-01-01
    • 2023-04-02
    • 2015-06-20
    相关资源
    最近更新 更多