【问题标题】:Jinja, Flask and WTForms: how to pass parameters in field? [duplicate]Jinja、Flask 和 WTForms:如何在字段中传递参数? [复制]
【发布时间】:2016-06-16 13:18:15
【问题描述】:

我正在关注这个教程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 %}

这里是 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>

它最终会生成一个序列:

<dt><label for="email">Email Address</label>
<dd><input id="email" name="email" type="text" value="">

我想以不同的方式添加更多参数,例如:

      <input type="email" id="email" name="email" class="input-xlarge"
        placeholder="Email Address" value="{{ form.email }}"
        required>

如何修改

  <dt>{{ field.label }}
  <dd>{{ field(**kwargs)|safe }}

实现这个目标?

【问题讨论】:

  • 你的标题与问题有什么关系?
  • 发现不错,已修复。
  • field documentation 你可以做form.email(style="style") 我不确定它是否会传递html属性。我记得也有这个问题。但后来改了代码

标签: python flask jinja2 wtforms flask-wtforms


【解决方案1】:

来自documentation,您可以这样做:

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

将渲染:

<input type="email" id="email" name="email" class="input-xlarge"
        placeholder="Email Address" value="testemail@testing.com"
        required>

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

【讨论】:

  • 谢谢,但它不起作用:文件“/app/templates/register.html”,第 53 行,块“内容”{{ render_field(form.email(class_="input-xlarge" , placeholder="Email Address", value="testemail@testing.com")) }} 文件“/app/templates/_formhelpers.html”,第 3 行,在模板
    {{ field(**kwargs)|安全}} AttributeError:“HTMLString”对象没有属性“__ call __”
  • 你不能将它传递给 render_field。您需要修改代码,以便 render_field 只呈现错误。除非您只更新可以像类一样通用的信息。然后你可以修改render_field有&lt;dd&gt;{{ field(class_="class you want", **kwargs)|safe }}
  • 我想我明白你的意思了。但是,如何将类添加到 _formhelpers.html 中的 some 字段,而不是 _formhelpers.html 中的 all 字段?
  • 有一个render_field的类参数{% macro render_field(field, class_to_use) %}然后就可以使用{{ field(class_=class_to_use, **kwargs)|safe }}
  • 你将如何传递所需的标签?它就在那里,我想你用过InputRequired()。但是在jinja2中怎么传呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 2014-07-28
  • 2020-11-30
  • 1970-01-01
相关资源
最近更新 更多