我在Flask-Admin应用程序中使用Flask-Security。
login.html模板当前是:
% extends "base.html" %}
{% from "security/_macros.html"
import render_field_with_errors, render_field %}
{% block content %}
{% include "security/_messages.html" %}
Custom Login Form
{{ login_form.hidden_tag() }}
{{ render_field_with_errors(login_form.email) }}
{{ render_field_with_errors(login_form.password) }}
{{ render_field_with_errors(login_form.remember) }}
{{ render_field(login_form.next) }}
{{ render_field(login_form.submit) }}
{% include "security/_menu.html" %}
{% endblock %}
这是在/templates/security/login_user.html中。我将其设置为我的配置中加载的文件。
SECURITY_LOGIN_USER_TEMPLATE = 'security/login_user.html'
如果我将自定义登录表单更改为其他内容,则文本会更改,以便正确加载此文件。唯一的问题是没有造型。它就像CSS没有被拿起来:
flask-admin_1 |提高value.with_traceback(tb)
flask-admin_1 |顶级模板代码中的文件“/code/app/templates/security/login_user.html”,第3行
flask-admin_1 | {%from“security / _macros.html”import render_field_with_errors,render_field%}
flask-admin_1 |在顶级模板代码中输入“/code/app/templates/base.html”第26行
flask-admin_1 | {%block content%}
flask-admin_1 |在“内容”块中输入文件“/code/app/templates/security/login_user.html”,第9行
flask-admin_1 | {{login_form.hidden_tag()}}
flask-admin_1 |在getattr中输入文件“/usr/local/lib/python3.5/dist-packages/jinja2/environment.py”,第408行
flask-admin_1 | return getattr(obj,attribute)
flask-admin_1 | jinja2.exceptions.UndefinedError:'login_form'未定义
base.html文件*
<html>
<head>
<title>Flask-Security Example</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
{%- with messages = get_flashed_messages(with_categories=true) -%}
{% if messages %}
<ul class=flashes>
{% for category, message in messages %}
<li class="{{ category }}">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{%- endwith %}
<ul>
{% if current_user.is_authenticated %}
<li>Hello {{ current_user.email }}</li>
<li><a href="{{ url_for('security.logout') }}">Logout</a></li>
{% else %}
<li><a href="{{ url_for('security.login') }}">Login</a></li>
<li><a href="{{ url_for('security.register') }}">Register</a></li>
{% endif %}
</ul>
{% block content %}
{% endblock %}
</body>
</html>
Flask-Security默认会在“/ templates / security”中查找它的模板。如果找不到模板,它将使用默认的捆绑模板。
覆盖默认模板的最简单方法是:
有了这个,您甚至不需要更改“SECURITY_LOGIN_USER_TEMPLATE”默认配置。
我希望这可以帮助你。
除非您的base.html
已包含CSS链接,否则您需要将它们链接到您的登录模板。在这里看看这个Flask-Admin登录示例:
http://examples.flask-admin.org/auth/admin/login/
请注意,该页面正在使用Bootstrap for CSS。您必须明确导入它,否则该网站将不知道该设计应该是什么:
把它添加到你的<head>
(我推荐你的base.html
所以你不必反复重复这个):
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">