将变量传递给Jinja2中的宏

时间:2012-08-28 16:49:09

标签: python google-app-engine jinja2

我制作了一些小宏,用于显示文本行和标签:

{% macro input(name, text, help_text, value="", input_type) -%}
    <label for="id_{{name}}">{{text}}<span class="right">{{help_text}}</span></label>
    <input id="id_{{name}}" name="{{name}}" value="{{value}}" type="{{input_type}}" />
{{%- endmacro %}

问题是当我调用jinja2宏时:

{{input("username", "Korisničko ime:", "Pomoć", {{value_username}}, "text")}

当我使用{{value_username}}作为参数调用输入时,我无法使其工作,我总是收到错误。

您知道任何解决方案我如何将{{value_username}}作为参数调用。

2 个答案:

答案 0 :(得分:13)

我相信

{{ input("username", "Korisničko ime:", "Pomoć", value_username, "text") }}

应该有效

答案 1 :(得分:3)

尽管艾美特·巴特勒(Emmett J. Butler)已经提供了一个答案,但是对于宏观参数的排序有一个小小的挑剔。您目前使用以下签名:

input(name, text, help_text, value="", input_type)

您应该始终将包含默认值的参数放在所有其他必需参数之后,因此将顺序更改为:

input(name, text, help_text, input_type, value="")

现在,当使用变量作为参数调用宏时,您不需要使用{{ }}包围变量,因为您已经在{% ... %}内。