如何在包含的文件中使用宏

时间:2013-09-25 10:21:37

标签: flask jinja2

view.jinja

{% extends "layout/defaultlayout.jinja" %}
{% include('details.jinja') %}

defaultlayout.jinja

{% import 'elements/macros.jinja' as html %}

但我无法在detail.jinja中使用宏 html 而不会重新包含它

2 个答案:

答案 0 :(得分:8)

从您的示例中看,您好像要尝试导入macros.jinja,并将 用作名为html的宏。它不会那样工作。

宏是在jinja文件中定义的,其中包含名称。

macros.jinja:

{% macro dostuff(x,y,z) %}
    <a href="{{ x }}" title="{{y}}">{{z}}</a>
{% endmacro %}

然后您可以使用导入标记导入整个文件:

{% import macros.jinja as macros %}

然后,在当前的命名空间中,您将拥有macros,它指向macros.jinja文件。要使用dostuff宏,您必须致电macros.dostuff(...)

您需要在macros.jinja中定义一个名为html的宏,将macros.jinja导入为macros,然后使用macros.html(...)调用它。

这有意义吗?

答案 1 :(得分:6)

丹尼尔的回答对我没有帮助。我必须导入以下方式

{% from "post_entity.html" import show_post with context %}

此处post_entity.html是包含show_post方法的宏的文件
然后使用以下方式:

{{show_post(post)}}

此处post是从 flask render_template发送到模板的词典。
macro file文件看起来像这样:
post_entity.html

{% macro show_post(post) %}
    {{post.photo_url}}
    {{ post.caption }}
{% endmacro %}