18

查看.jinja

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

默认布局.jinja

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

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

4

2 回答 2

20

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

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

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

{{ show_post(post) }}

这是从flaskpost发送到模板的字典。 该文件看起来像这样: post_entity.html render_template
macro file

{% macro show_post(post) %}
    {{ post.photo_url }}
    {{ post.caption }}
{% endmacro %}
于 2017-07-11T03:19:27.637 回答
14

从您的示例中,它看起来好像您正在尝试 import macros.jinja,并将用作名为html. 它不是那样工作的。

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

宏.jinja:

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

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

{% import "macros.jinja" as macros %}

那么,在您当前的命名空间中,您将拥有macros指向 macros.jinja 文件的 . 要使用dostuff宏,您必须调用macros.dostuff(...).

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

那有意义吗?

于 2013-12-01T02:59:37.247 回答