Flask-Security模板未生效

问题描述 投票:0回答:2

我在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没有被拿起来:Image

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>
python flask flask-admin flask-security
2个回答
2
投票

Flask-Security默认会在“/ templates / security”中查找它的模板。如果找不到模板,它将使用默认的捆绑模板。

覆盖默认模板的最简单方法是:

  • 从他们的Github Source复制Flask-Security模板并将其粘贴到您的文件夹中。你应该有“/ templates / security”目录。
  • 根据需要更改模板。
  • 最后,更改“base.html”文件以包含您的CSS(您甚至可以使用自己的base.html)。

有了这个,您甚至不需要更改“SECURITY_LOGIN_USER_TEMPLATE”默认配置。

我希望这可以帮助你。


0
投票

除非您的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">
© www.soinside.com 2019 - 2024. All rights reserved.