使用 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_form
和 url_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/