Jinja、Flask 和 WTForms:如何在字段中传递参数?

Ive*_*ion 5 python jinja2 flask wtforms flask-wtforms

我正在关注本教程http://flask.pocoo.org/docs/0.10/patterns/wtforms/

这是一个带有宏的 _formhelpers.html 模板示例:

{% macro render_field(field) %}
  <dt>{{ field.label }}
  <dd>{{ field(**kwargs)|safe }}
  {% if field.errors %}
    <ul class=errors>
    {% for error in field.errors %}
      <li>{{ error }}</li>
    {% endfor %}
    </ul>
  {% endif %}
  </dd>
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)

这里的 register.html 模板利用了 _formhelpers.html 模板:

{% from "_formhelpers.html" import render_field %}
<form method=post action="/register">
  <dl>
    {{ render_field(form.username) }}
    {{ render_field(form.email) }}
    {{ render_field(form.password) }}
    {{ render_field(form.confirm) }}
    {{ render_field(form.accept_tos) }}
  </dl>
  <p><input type=submit value=Register>
</form>
Run Code Online (Sandbox Code Playgroud)

它最终生成了一个序列:

<dt><label for="email">Email Address</label>
<dd><input id="email" name="email" type="text" value="">
Run Code Online (Sandbox Code Playgroud)

我想放置更多参数,并以一种有点不同的方式,例如:

      <input type="email" id="email" name="email" class="input-xlarge"
        placeholder="Email Address" value="{{ form.email }}"
        required>
Run Code Online (Sandbox Code Playgroud)

我如何修改

  <dt>{{ field.label }}
  <dd>{{ field(**kwargs)|safe }}
Run Code Online (Sandbox Code Playgroud)

实现这一目标?

Jas*_*ger 4

文档中您可以执行以下操作:

{{ form.email(class_="input-xlarge", 
              placeholder="Email Address",
              value="testemail@testing.com") }}
Run Code Online (Sandbox Code Playgroud)

这将呈现:

{{ form.email(class_="input-xlarge", 
              placeholder="Email Address",
              value="testemail@testing.com") }}
Run Code Online (Sandbox Code Playgroud)

只需将“testemail@testing.com”替换为 form.email(不带大括号),因为您已经在其中了。

  • 有一个 render_field 的类参数 `{% macro render_field(field, class_to_use) %}` 然后你可以使用 `{{ field(class_=class_to_use, **kwargs)|safe }}` (2认同)