view.jinja
{% extends "layout/defaultlayout.jinja" %}
{% include('details.jinja') %}
defaultlayout.jinja
{% import 'elements/macros.jinja' as html %}
但我无法在detail.jinja中使用宏 html 而不会重新包含它
答案 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 %}