.. _tutorial-templates: Шаг 6: Шаблоны ============== Теперь нам следует поработать над шаблонами. Если мы будем сейчас запрашивать URL, мы получим лишь исключения, означающие, что Flask не может найти шаблоны. Шаблоны используют синтаксис `Jinja2`_ и по умолчанию имеют автоматическую обработку специальных последовательностей (autoescaping). Это означает, что если вы в шаблоне вы не пометили значение с помощью :class:`~flask.Markup` или с помощью фильтра ``|safe``, Jinja2 гарантирует, что особые символы, например ``<`` или ``>``, будут заменены спецпоследовательностями их XML-эквивалентов. Также мы используем наследование шаблонов, что делает возможным повторно использовать макет веб-сайта на всех страницах. Поместите в папку `templates` следующие шаблоны: .. _Jinja2: http://jinja.pocoo.org/2/documentation/templates layout.html ----------- Этот шаблон содержит скелет HTML, заголовок и ссылку для входа на сайт (или выхода, если пользователь уже вошёл). Он также отображает всплывающие сообщения, если они есть. Блок ``{% block body %}`` может быть заменён в дочернем шаблоне на блок с тем же именем (``body``). Также из шаблона доступен словарь :class:`~flask.session`, и вы можете его использовать для проверки - вошёл ли пользователь или нет. Заметим, что в Jinja вы можете иметь доступ к отсутствующим атрибутам и элементам объектов / словарей, что делает следующий код работоспособным, даже при отсутствии в сессии ключа ``'logged_in'``: .. sourcecode:: html+jinja Flaskr

Flaskr

{% if not session.logged_in %} log in {% else %} log out {% endif %}
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %} {% block body %}{% endblock %}
show_entries.html ----------------- Этот шаблон расширяет вышеприведённый шаблон `layout.html` для отображения сообщений. Заметим, что цикл `for` итерирует сообщения которые мы передаём внутрь шаблона с помощью функции :func:`~flask.render_template`. Также мы сообщаем форме, чтобы она предала данные вашей функции `add_entry`, используя при этом `POST` в качестве метода `HTTP`: .. sourcecode:: html+jinja {% extends "layout.html" %} {% block body %} {% if session.logged_in %}
Title:
Text:
{% endif %} {% endblock %} login.html ---------- Наконец, шаблон для осуществления входа, который просто-напросто отображает форму, позволяющую пользователю войти под своим логином: .. sourcecode:: html+jinja {% extends "layout.html" %} {% block body %}

Login

{% if error %}

Error: {{ error }}{% endif %}

Username:
Password:
{% endblock %} Продолжение: :ref:`tutorial-css`. `Оригинал этой страницы `_