如何使用jinja2宏修改CSS类

时间:2019-08-26 14:40:03

标签: python flask jinja2

大家好,我正在学习烧瓶,有问题。我试图基于验证来修改输入表单控件类。

在jinja2模板中,我有以下内容(我正在使用render_field)导入了宏:

{% from 'includes/_formhelpers.html' import render_field %}

          <div class="form-group">
            <div class="input-group input-group-alternative mb-3">
              <div class="input-group-prepend">
                <span class="input-group-text"><i class="ni ni-hat-3"></i></span>
              </div>
              {{ render_field(form.username, placeholder="Username",class="form-control") }}
            </div>
          </div>

然后在宏文件中,我具有以下内容:

{% macro render_field(field) %}
{{ field(**kwargs)|safe }}
{% if field.errors %}
  {% for error in field.errors %}
      <input class="form-control is-invalid">
      <div class="invalid-feedback">
    {{ error }}
    </div>
  {% endfor %}
{% endif %}
{% endmacro %}

问题在于宏正在渲染另一个输入框

Rendered form

生成的HTML:

<div class="form-group">
 <div class="input-group input-group-alternative mb-3">
         <div class="input-group-prepend">
            <span class="input-group-text"><i class="ni ni-hat-3"></i></span>
         </div>

    <input class="form-control" id="username" name="username" placeholder="Username" required="" type="text" value="pandazulweb">
    <input class="form-control is-invalid">
        <div class="invalid-feedback">
            Username already in use.
        </div>
</div>

我认为这与kwargs以及我如何将类传递给模板有关,但是我是jinja2的菜鸟

1 个答案:

答案 0 :(得分:0)

除非我丢失了某些内容,否则似乎第二个字段是由于“ ”所引起的,您将其包括在宏的错误条件中。

编辑: 要将类传递到表单字段,您需要使用“ class _ =“ is-invalid””,而不是“ class =”。因此,只需使用它并从错误情况中删除第二个输入即可。

编辑2:我想我明白了问题所在。您需要在else错误块中的宏错误块中放置对field()的首次调用。因此,只有在没有错误的情况下,它才会使用kwargs等创建字段。