Шаблоны 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">