python - 如何在我的页面上嵌入 Flask-Security 登录表单?

标签 python flask jinja2 flask-security

使用 Flask-Security 提供的示例代码,我可以从 /login 路径正常访问 login_user.html 表单,并且工作正常。但是,我想在左上角的所有网站页面上嵌入登录表单。我以为我可以使用 Jinja {% include "security/login_user.html"%} 语句将表单放在 base.html 中,但这似乎并没有工作。我收到以下错误:

jinja2.exceptions.UndefinedError: 'login_user_form' is undefined

有没有办法在另一个模板中包含或嵌入登录表单,并且仍然可以访问相应的表单对象?

最佳答案

security/login_user.html 是登录表单的完整页面模板。这不是您希望在每个页面上嵌入的内容,因为它处理其他内容,例如闪烁的消息、错误和布局。

编写您自己的模板以仅呈现表单并包含那个,或将其添加到您的基本模板。

<form action="{{ url_for_security('login') }}" method="POST">
  {{ login_user_form.hidden_tag() }}
  {{ login_user_form.email(placeholder='Email') }}
  {{ login_user_form.password(placeholder='Password') }}
  {{ login_user_form.remember.label }} {{ login_user_form.remember }}
  {{ login_user_form.submit }}
</form>

(这只是一个示例,您需要对其进行样式设置以适合您的页面。)

您的 View 都不会直接处理登录表单,因此 login_formurl_for_security 在呈现大多数模板时不可用(这导致了您观察到的原始问题).使用 app.context_processor 为每个请求注入(inject)它们。

from flask_security import LoginForm, url_for_security

@app.context_processor
def login_context():
    return {
        'url_for_security': url_for_security,
        'login_user_form': LoginForm(),
    }

关于python - 如何在我的页面上嵌入 Flask-Security 登录表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47317722/

相关文章:

python - 为什么 cProfile 会导致函数返回不同的值?

python - Google App Engine python - 未定义 self

python - Flask jsonify 对象列表

python - 为什么我没有加载 jinja 继承的头部部分?

Ansible URI 模块从变量传递整数

python - Pandas describe() 函数不会在 PyCharm 上打印任何内容

Python 3安装失败 'Keyset as registered is invalid'

google-app-engine - jinja2 表单渲染不允许包含 "-"的属性

python - 测试 Flask-Cache 的缓存命中

ajax - 用新数据更新 plotly.js 绘图