【问题标题】:Python Flask Render Field macro take arguments jinja2 [duplicate]Python Flask Render Field宏接受参数jinja2 [重复]
【发布时间】:2016-09-12 00:28:31
【问题描述】:

我正在尝试制作一个接受参数并将元素添加到表单字段的宏。这是我当前的代码。

      {% 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: expected token 'name', got '**'

【问题讨论】:

  • 您的代码遇到了什么问题?您能否举例说明您期望发生的情况?
  • 所以当我这样做时 {{ render_field(form.reciver_name,"test","placeholder = a") }} 我希望它输出
  • 使用保留关键字(在本例中为 class)作为参数的名称可能会遇到问题。 WTForms 通过一个名为class_ 的参数来处理这个问题。尝试使用它。
  • 这不是问题所在。我不认为是这种情况,但我更改了参数名称以防万一

标签: python flask jinja2 flask-wtforms


【解决方案1】:

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

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

你可以尝试这样调用宏:

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

Jinja 应该将占位符关键字 arg 放在 kwargs 特殊变量中。我对flask-wtforms不是很熟悉,但是你应该可以在field(...)函数调用中使用这个kwargs变量。

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

【讨论】:

  • 当我尝试这个“TypeError:宏'render_field'不接受关键字参数'占位符'”但谢谢你将kwargs作为一个特殊变量的提示
  • 您需要在render_field 调用中实际使用**kwargs。如果您在宏中使用 kwargs,Jinja 宏会自动接受任意 kwargs。见jinja.pocoo.org/docs/dev/templates/#macros
猜你喜欢
  • 1970-01-01
  • 2019-05-17
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
相关资源
最近更新 更多