Flask-security和Bootstrap

Esp*_*enG 5 python flask twitter-bootstrap flask-login flask-security

如何使用Bootstrap设置Flask-security登录站点的样式?html表单如下所示:

<form action="{{ url_for_security('login') }}" method="POST" name="login_form">
  {{ login_user_form.hidden_tag() }}
  {{ render_field_with_errors(login_user_form.email) }}
  {{ render_field_with_errors(login_user_form.password) }}
  {{ render_field_with_errors(login_user_form.remember) }}
  {{ render_field(login_user_form.next) }}
  {{ render_field(login_user_form.submit) }}
</form>
Run Code Online (Sandbox Code Playgroud)

Bootstrap已实现,但我不知道如何编辑字段和提交按钮..

jum*_*pap 11

render_field_*功能接受一个class_参数,这将HTML类添加到该字段.根据需要添加引导样式类.

render_field_with_errors(login_user_form.email, class_="form-control") }}
{{ render_field(login_user_form.submit, class_="btn btn-default") }}
Run Code Online (Sandbox Code Playgroud)

等等.


eri*_*ric 5

Flask-Security 使用 Flask-WTForms 来呈现和验证表单。在 Flask-Security 1.7.5 中,“security/_macros.html”中定义的默认值render_field_with_errorsrender_field宏是

{% macro render_field_with_errors(field) %}
  <p>
    {{ field.label }} {{ field(**kwargs)|safe }}
    {% if field.errors %}
      <ul>
      {% for error in field.errors %}
        <li>{{ error }}</li>
      {% endfor %}
      </ul>
    {% endif %}
  </p>
{% endmacro %}

{% macro render_field(field) %}
  <p>{{ field(**kwargs)|safe }}</p>
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)

根据Flask-WTForms 0.10 docs,上述两个宏函数都接受...

... 转发到 WTForm 的字段函数的关键字参数,该函数为我们呈现字段。关键字参数将作为 HTML 属性插入。

具体来说,行 {{ field(**kwargs)|safe }} 将 HTML 转义关键字参数传递给 field 函数。因此,您可以添加类,

{{ render_field_with_errors(login_user_form.email, class="form-control") }}
Run Code Online (Sandbox Code Playgroud)

并且还可以覆盖默认的 HTML 属性,

{{ render_field_with_errors(login_user_form.email, 
    class="form-control", type="email", placeholder="Enter email") }}
{{ render_field(login_user_form.submit, class="btn btn-default", value="Submit" ) }}
Run Code Online (Sandbox Code Playgroud)

此外,您可以通过修改上面的宏来定义自己的宏。例如,如果您想使用 Bootstrap 警报来呈现表单验证错误,您可以定义宏函数render_field_with_bootstrap_errors

{% macro render_field_with_bootstrap_errors(field) %}
  <p>
    {{ field.label }} {{ field(**kwargs)|safe }}
    {% if field.errors %}
      {% for error in field.errors %}
        <div class="alert alert-danger" role="alert">{{ error }}</div>
      {% endfor %}
    {% endif %}
  </p>
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)

添加您自己的宏非常简单。例如,您可以将自定义宏放在模板目录中的“custom_macros.html”文件中,然后使用以下命令将函数加载到模板中

{% from "custom_macros.html" import render_field_with_bootstrap_errors %}
Run Code Online (Sandbox Code Playgroud)

这样,很容易修改宏以使用不同的 Bootstrap 功能。