【问题标题】:Flask and jinja2 include tagFlask 和 jinja2 包含标签
【发布时间】:2013-01-24 05:06:40
【问题描述】:

如何在 jinja2 中“包含标签”。我需要在基本模板中输出一块文章。他们在儿童身上起作用。

views.py

Articles.query.filter_by(name=name).first()

base.html

{% block content %}
    Content base
{% endblock %}
---{{ this_articles_tag }}----

children.html

{% extends 'base.html' %}
{% block content %}
    Content children
{% endblock %}
---{{ output Articles }}----

Django在这个“包含标签”中,在jinja2中怎么做? (不使用 context_processor)

【问题讨论】:

    标签: python django flask jinja2


    【解决方案1】:

    如果您需要在模板中包含另一个模板,只需在 Jinja 中使用include。但是如果你在谈论模板标签(在 Django 中我记得我很喜欢它们),那么在 Flask 中只有你提到的 context_processor 是要走的路。我认为这根本不是一件坏事。

    编辑:

    documentation 中指出了将上下文处理器注册为函数的最简单方法。

    但是如果你想要更花哨的东西,比如动态加载器,或者你会从不同的地方加载你的函数,那么你可以定义自己的装饰器函数,它基本上包装了返回字典的函数:

    def example_templatetag():
      def get_something():
        return get_want_you_want_from_db()
      return dict(get_something=get_something)
    

    然后,您可以在创建 Flask 应用程序对象的地方轻松注册此函数:

    app.context_processor(example_templatetag)
    

    然后在你可以使用的模板中是这样的:

    {% set data_you_wanted=get_something() %}
    {{ data_you_wanted }}
    

    但也许对你来说,文档中提到的方式已经足够了;)

    【讨论】:

    • Context_protsessor 可以注册为函数并在模板中调用吗?我不会在所有页面上使用。
    • 在我的回答中添加了两种如何在 Jinja 模板中获得可用功能的方法。因此,该函数注册了一个上下文处理器。然后它真的变成了 Django 中的 templatetag :)
    • 谢谢。作为另一种解决方案,可以使用基于类的视图。在基类中定义上下文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多