Шаблоны Flask-Security не вступают в силу

Я использую Flask-Security с моим приложением Flask-Admin.

Текущий шаблон 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 не поднимается: Образ

фляга-admin_1 | поднять значение.with_traceback(тб)

фляга-admin_1 | Файл "/code/app/templates/security/login_user.html", строка 3, в коде шаблона верхнего уровня

фляга-admin_1 | {% от "security/_macros.html" import render_field_with_errors, render_field %}

фляга-admin_1 | Файл "/code/app/templates/base.html", строка 26, в коде шаблона верхнего уровня

фляга-admin_1 | {% block content %}

фляга-admin_1 | Файл "/code/app/templates/security/login_user.html", строка 9, в блоке "content"

фляга-admin_1 | {{ login_form.hidden_tag() }}

фляга-admin_1 | Файл "/usr/local/lib/python3.5/dist-packages/jinja2/environment.py", строка 408, в getattr

фляга-admin_1 | вернуть getattr(объект, атрибут)

фляга-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>

2 ответа

Flask-Security по умолчанию будет искать свои шаблоны в "/templates/security". Если шаблоны не найдены, будут использоваться связанные шаблоны по умолчанию.

Самый простой способ переопределить шаблоны по умолчанию:

  • Скопируйте шаблоны Flask-Security из источника Github и вставьте их в свою папку. У вас должен быть каталог "/templates/security".
  • Измените шаблоны, как вы хотите.
  • Наконец, измените файл "base.html", чтобы включить ваш CSS (вы можете даже использовать свой собственный base.html).

При этом вам даже не потребуется изменять конфигурацию по умолчанию "SECURITY_LOGIN_USER_TEMPLATE".

Я надеюсь, это поможет вам.

Если только ваш base.html уже содержит CSS-ссылки, вам нужно добавить их в свой шаблон входа. Взгляните на этот пример входа Flask-Admin здесь:

http://examples.flask-admin.org/auth/admin/login/

Обратите внимание, что страница использует Bootstrap для 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">
Другие вопросы по тегам