我有以下Jinja2文件,但宏do_stuff
似乎无法访问something
中定义的something_else
和my_template.jinja2
的值}。
有没有办法让这成为可能?我知道我可以手动将它们传递给宏,但是因为它们的值在模板文件中每次调用宏时保持不变,所以不必这样做就好了。
如果我将宏直接嵌入my_template.jinja2
它可以工作,但是它必须在使用它的所有模板中重复。
macro.jinja2
{% macro do_stuff(value) %}
<p>Something is {{ something | default('nothing') }}.</p>
<p>Something else is {{ something_else | default ('nothing') }}.</p>
<p>Values is {{ value }}.</p>
{% endmacro %}
base_template.jinja2
{% from 'macros.jinja2' import do_stuff %}
{# Other common stuff goes here #}
my_template.jinja2
{% extends 'base_template.jinja2' %}
{% set something = "foo" %}
{% set something_else = "bar" %}
{# Content #}
{{ do_stuff("baz1") }}
{# More content #}
{{ do_stuff("baz2") }}
{# More content #}
{# etc. #}
答案 0 :(得分:0)
我找不到办法做到这一点,最后每次只传递默认参数:
<强> macro.jinja2 强>
{% macro do_stuff(something, something_else, value) %}
<p>Something is {{ something | default('nothing') }}.</p>
<p>Something else is {{ something_else | default ('nothing') }}.</p>
<p>Values is {{ value }}.</p>
{% endmacro %}
<强> my_template.jinja2 强>
{% extends 'base_template.jinja2' %}
{% set something = "foo" %}
{% set something_else = "bar" %}
{# Content #}
{{ do_stuff(something, something_else, "baz1") }}
{# More content #}
{{ do_stuff(something, something_else, "baz2") }}
{# More content #}
{# etc. #}
答案 1 :(得分:0)
在导入中使用with context
{% from 'macros.jinja2' import do_stuff with context%}