Nic*_*ach 10 python jinja2 flask flask-security
使用Flask-Security提供的示例代码,我可以正常访问路径中的login_user.html表单,/login并且工作正常.但是,我想在左上角的所有网站页面上嵌入登录表单.我以为我可以使用Jinja {% include "security/login_user.html" %}语句来放置表单base.html,但这似乎不起作用.我收到以下错误:
jinja2.exceptions.UndefinedError: 'login_user_form' is undefined
Run Code Online (Sandbox Code Playgroud)
有没有办法在另一个模板中包含或嵌入登录表单,仍然可以访问相应的表单对象?
dav*_*ism 12
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>
Run Code Online (Sandbox Code Playgroud)
(这只是一个示例,您需要设置它以适合您的页面.)
你的看法都不会直接处理登录表单,所以login_form并url_for_security没有提供在渲染大多数模板(这是导致你发现原来的问题).使用,为每个请求注入它们app.context_processor.
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(),
}
Run Code Online (Sandbox Code Playgroud)
您的堆栈跟踪内容如下:
jinja2.exceptions.UndefinedError: 'login_user_form' is undefined
此错误消息来自 Jinja,表示login_user_form未定义。
为了解决这个问题,如果这是你的base.html,
...
{% block content %}
<form action="" method="post" name="post">
{{form.hidden_tag()}}
...
Run Code Online (Sandbox Code Playgroud)
您必须将login_user_form其作为上下文变量传递给渲染模板。因此,在您的/login路线中,您应该返回如下内容:
return render_template("base.html",
title = 'Home',
form = login_user_form)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1560 次 |
| 最近记录: |