Python Flask Render Field宏接受参数jinja2

时间:2016-09-12 00:28:31

标签: python flask jinja2 flask-wtforms

我正在尝试创建一个接受参数的宏,并将元素添加到表单字段中。这是我目前的代码。

      {% macro render_field(field,class,**custom) %}
  <div class="form-group">
    {% if field.name != "submit" %}
    {{ field.label }}
    {% endif %}



      {{ field(class="form-control %s" % class , custom ) }}
  </div>
  {% endmacro %}


{{ render_field(form.reciver_name,"test","placeholder = a") }}

我只是不知道如何接受多个论点而且不太了解** kwargs

我收到此错误TemplateSyntaxError:期望令牌'name',得到'**'

1 个答案:

答案 0 :(得分:1)

Jinja宏与定义python函数并不完全相同。见这里:http://jinja.pocoo.org/docs/dev/templates/#macros

所以我认为您的宏定义中不需要li。此外,当您调用宏时,第三个参数不是关键字参数。它是文字字符串**custom

您可以尝试像这样调用宏:

"placeholder = a"

Jinja应该将占位符关键字arg放在{{ render_field(form.reciver_name, "test", placeholder="a") }} 特殊变量中。我对flask-wtforms不太熟悉,但你应该能够在kwargs函数调用中使用这个kwargs变量。

供将来参考:field(...)需要在宏中至少访问一次才能接受任何关键字参数。有关更多详细信息,请参阅链接的重复问题。