Шаблоны — Документация Flask (2.3.x)

Вы написали представления аутентификации для своего приложения, но если вы запускаете сервер и пытаетесь перейти по любому из URL-адресов, вы увидите Ошибка TemplateNotFound . Это потому, что взгляды зовут render_template() , но вы еще не написали шаблоны. Файлы шаблонов будут храниться в каталоге templates внутри колба пакет.

Шаблоны — это файлы, содержащие статические данные, а также заполнители. для динамических данных. Шаблон визуализируется с определенными данными для создания итоговый документ. Flask использует библиотеку шаблонов Jinja для рендеринга. шаблоны.

В вашем приложении вы будете использовать шаблоны для отображения HTML, будет отображаться в браузере пользователя. Во Flask Jinja настроен на autoescape любые данные, отображаемые в шаблонах HTML. Это означает что безопасно отображать пользовательский ввод; любые символы, которые они ввели, что может испортить HTML, например,

< и > будет экранированным с безопасных значений , которые выглядят одинаково в браузере, но не вызывают нежелательных последствия.

Jinja выглядит и ведет себя в основном как Python. Используются специальные разделители. чтобы отличить синтаксис Jinja от статических данных в шаблоне. Все, что находится между {{ и }} , является выражением, которое будет выводиться к итоговому документу. {% и %} обозначает поток управления оператор типа , если и для . В отличие от Python, блоки обозначаются начальным и конечным тегами, а не отступом, поскольку статический текст внутри блок может изменить отступ.

Базовый макет

Каждая страница в приложении будет иметь одинаковую базовую компоновку вокруг другое тело. Вместо того, чтобы писать всю структуру HTML в каждом шаблон, каждый шаблон будет расширять базовый шаблон и переопределять конкретные разделы.

flaskr/templates/base.html

 
{% title блока %}{% endblock %} - Flaskr
 css') }}">
<навигация>
   

Фласк

<ул> {% если г.пользователь %}
  • {{ g.user['username'] }}
  • Выйти {% еще %}
  • Зарегистрироваться
  • Войти {% конец%} <раздел> <заголовок> {% заголовок блока %}{% endblock %} {% для сообщения в get_flashed_messages() %}
    {{ сообщение }}
    {% конец для %} {% block content %}{% endblock %}
  • г автоматически доступен в шаблонах. На основе если g.user установлен (из load_logged_in_user ), либо имя пользователя и отображается ссылка для выхода или ссылки для регистрации и входа отображаются.

    url_for() также автоматически доступен и используется для создания URL-адресов для представлений вместо того, чтобы записывать их вручную.

    После заголовка страницы и перед содержимым шаблон зацикливается каждое сообщение, возвращаемое get_flashed_messages() . Ты использовал flash() в представлениях для отображения сообщений об ошибках, и это код который будет отображать их.

    Здесь определены три блока, которые будут переопределены в другом шаблоны:

    1. {% block title %} изменит заголовок, отображаемый в вкладка браузера и заголовок окна.

    2. {% заголовок блока %} аналогичен заголовку , но изменит название, отображаемое на странице.

    3. {% block content %} — это место, где находится содержимое каждой страницы, например как форма входа или сообщение в блоге.

    Базовый шаблон находится непосредственно в каталоге templates . Хранить другие организованы, шаблоны для плана будут помещены в каталог с тем же именем, что и схема.

    Регистр

    flaskr/templates/auth/register.html

     {% расширяет 'base.html' %}
    {% заголовок блока%}
       

    {% block title %}Зарегистрируйтесь{% endblock %}

    {% конечный блок%} {% заблокировать содержимое %} <метод формы="сообщение">
    <введите имя = "имя пользователя" требуется> {% конечный блок%}

    {% extends 'base. html' %} сообщает Jinja, что этот шаблон должен заменить блоки из базового шаблона. Весь отображаемый контент должен появляются внутри тегов {% block %} , которые переопределяют блоки из базы шаблон.

    Полезный шаблон, используемый здесь, заключается в размещении {% block title %} внутри {% заголовок блока %} . Это установит основную надпись, а затем выведет его значение в блок заголовка, чтобы и окно, и страница делитесь одним и тем же заголовком, не написав его дважды.

    Теги ввода используют здесь обязательный атрибут . Это говорит браузер не будет отправлять форму, пока эти поля не будут заполнены. Если пользователь использует старый браузер, который не поддерживает этот атрибут, или если они используют что-то помимо браузера для отправки запросов, вы все еще хотите проверить данные в представлении Flask. Важно всегда полностью проверяйте данные на сервере, даже если это делает клиент также некоторая проверка.

    Войти

    Идентичен шаблону реестра, за исключением названия и кнопка отправки.

    flaskr/templates/auth/login.html

     {% расширяет 'base.html' %}
    {% заголовок блока%}
       

    {% block title %}Войти{% endblock %}

    {% конечный блок%} {% заблокировать содержимое %} <метод формы="сообщение"> <введите имя = "имя пользователя" требуется>
    {% конечный блок%}

    Регистрация пользователя

    Теперь, когда шаблоны аутентификации написаны, вы можете зарегистрировать пользователь. Убедитесь, что сервер все еще работает (фласк , запустите , если это не так), затем перейдите по адресу http://127.0.0.1:5000/auth/register.

    Попробуйте нажать кнопку «Регистрация» без заполнения формы и увидите что браузер показывает сообщение об ошибке. Попробуйте удалить требуемый атрибуты из шаблона register.html и нажмите «Зарегистрировать». снова. Вместо того, чтобы браузер отображал ошибку, страница перезагрузится и ошибка с

    flash() в представлении будет показано.

    Заполните имя пользователя и пароль, и вы будете перенаправлены на страницу входа страница. Попробуйте ввести неправильное имя пользователя или правильное имя пользователя и неверный пароль. Если вы войдете в систему, вы получите сообщение об ошибке, потому что нет представления index для перенаправления.

    Перейти к статическим файлам.

    tornado.template — Гибкая генерация вывода — Документация Tornado 6.3.2

    Простая система шаблонов, которая компилирует шаблоны в код Python.

    Основное использование выглядит так:

     t = template.Template("{{ myvalue }}")
    печать (т. сгенерировать (мое значение = "XXX"))
     

    Loader — это класс, который загружает шаблоны из корневого каталога и кэширует скомпилированных шаблонов:

     загрузчик = шаблон. Loader("/home/btaylor")
    print(loader.load("test.html").генерировать(myvalue="XXX"))
     

    Компилируем все шаблоны в сырой Python. Отчеты об ошибках в настоящее время… ммм, интересный. Синтаксис шаблонов:

     ### base.html
    
      <голова>
        {% block title %}Заголовок по умолчанию{% end %}
      
      <тело>
        <ул>
          {% для студента среди студентов %}
            {% заблокировать студента %}
              
  • {{ escape(имя_учащегося) }}
  • {% конец %} {% конец %} ### полужирный.html {% расширяет "base.html" %} {% block title %} Более жирный заголовок{% end %} {% заблокировать студента %}
  • {{ escape(student.name) }}
  • {% конец %}

    В отличие от большинства других систем шаблонов, мы не накладываем никаких ограничений на выражения, которые вы можете включить в свои утверждения. если получится и для блоков переведено точно на Python, поэтому вы можете делать сложные выражения, такие как:

     {% для студента в [p для p в людях, если p.
    student и p.age > 23] %}
  • {{ escape(имя_учащегося) }}
  • {% конец %}

    Прямой перевод на Python означает, что вы можете применять функции к выражениям легко, как escape() в приведенных выше примерах. Вы можете пройти функции в вашем шаблоне, как и любая другая переменная (В RequestHandler переопределите RequestHandler.get_template_namespace ):

     ### Код Python
    определить добавить (х, у):
       вернуть х + у
    template.execute (добавить = добавить)
    ### Шаблон
    {{ добавить (1, 2) }}
     

    Мы предоставляем функции escape() , url_escape() , json_encode() и squat() для всех шаблонов по умолчанию.

    Типичные приложения не создают экземпляры Template или Loader путем вручную, но вместо этого используйте рендер и render_string метода tornado.web.RequestHandler , которые загружают шаблоны автоматически на основе в настройках template_path Application .

    Имена переменных, начинающиеся с _tt_ , зарезервированы шаблоном системы и не должны использоваться кодом приложения.

    Справочник по синтаксису

    Шаблонные выражения заключены в двойные фигурные скобки: {{ ... }} . Содержимое может быть любым выражением Python, которое будет экранировано в соответствии с к текущей настройке автоэкранирования и вставляется в вывод. Другой директивы шаблона используют {% %} .

    Чтобы закомментировать раздел и исключить его из вывода, окружите его с {# ... #} .

    Чтобы включить литерал {{ , {% , или {# в выводе экранируйте их как {{! , {%! и {#! соответственно.

    {% apply *function* %}...{% end %}

    Применяет функцию к выходным данным всего кода шаблона между apply и конец :

     {% apply linkify %}{{name}} сказал: {{message}}{% end %}
     

    Обратите внимание, что в качестве детали реализации реализованы блоки применения. как вложенные функции и поэтому могут странно взаимодействовать с переменными установить через {% set %} или использование {% break %} или {% continue %} внутри петель.

    {% autoescape *function* %}

    Устанавливает режим автоэкранирования для текущего файла. Это не влияет другие файлы, даже те, на которые ссылается {% include %} . Обратите внимание, что автоматическое экранирование также можно настроить глобально, в приложении или Загрузчик .:

     {% автопобег xhtml_escape%}
    {% автоэкранирование Нет %}
     
    {% block *name* %}...{% end %}

    Указывает именованный сменный блок для использования с {% extends %} . Блоки в родительском шаблоне будут заменены содержимым одноименный блок в дочернем шаблоне.:

     
    {% block title %}Заголовок по умолчанию{% end %}
    
    {% расширяет "base.html" %}
    {% block title %}Название моей страницы{% end %}
     
    {% комментарий ... %}

    Комментарий, который будет удален из вывода шаблона. Обратите внимание, что нет тега {% end %} ; комментарий идет от слова комментарий до закрывающего тега %} .

    {% extends *filename* %}

    Наследовать от другого шаблона. Шаблоны, использующие extends , должны содержать один или несколько тегов block для замены содержимого из родительского шаблон. Все в дочернем шаблоне, не содержащееся в блок тег будет игнорироваться. Например, см. тег {% block %} .

    {% for *var* in *expr* %}...{% end %}

    То же, что и оператор python for . {% перерыв %} и {% continue %} можно использовать внутри цикла.

    {% from *x* import *y* %}

    То же, что и оператор python import .

    {% if *condition* %}...{% elif *condition* %}...{% else %}...{% end %}

    Условный оператор — выводит первый раздел, условие которого истинный. (разделы elif и else являются необязательными)

    {% import *module* %}

    То же, что и оператор python import .

    {% include *filename* %}

    Включает другой файл шаблона. Включаемый файл может видеть все локальные переменные, как если бы они были скопированы прямо в точку включает директива (исключением является директива {% autoescape %} ). В качестве альтернативы можно использовать {% шаблон модуля (имя файла, **kwargs) %} . чтобы включить другой шаблон с изолированным пространством имен.

    {% module *expr* %}

    Визуализирует UIModule . Выход UIModule : не экранировано:

     {% Шаблон модуля ("foo. html", arg=42) %}
     

    UIModules являются функцией торнадо.web.RequestHandler class (и конкретно его метод render ) и не будет работать когда система шаблонов используется сама по себе в других контекстах.

    {% raw *expr* %}

    Выводит результат данного выражения без автоматического экранирования.

    {% set *x* = *y* %}

    Устанавливает локальную переменную.

    {% попробовать %}...{% кроме %}...{% еще %}...{% наконец %}...{% конец %}

    То же, что и оператор python try .

    {% while *condition* %}... {% end %}

    То же, что и оператор python while . {% перерыв %} и {% continue %} можно использовать внутри цикла.

    {% пробел *режим* %}

    Устанавливает режим пробела для оставшейся части текущего файла (или до следующей директивы {% whitespace %} ). Видеть filter_whitespace для доступных опций. Новое в Торнадо 4.3.

    Код класса

    class tornado.template.Template( template_string , name='' , loader=None , compress_whitespace=None , autoescape='xhtml_escape' , пробел = нет )[ источник]

    Скомпилированный шаблон.

    Мы компилируем в Python из заданной строки template_string. Вы можете генерировать шаблон из переменных с помощью generate().

    Создание шаблона.

    Параметры
    • template_string ( str ) — содержимое файла шаблона.

    • name ( str ) — имя файла, из которого был загружен шаблон (используется для сообщения об ошибке).

    • загрузчик ( tornado.template.BaseLoader ) — ответственный BaseLoader для этого шаблона используется для разрешения {% include %} и {% extend %} директивы.

    • compress_whitespace ( bool ) — устарело, начиная с Tornado 4.3. Эквивалентно whitespace="single" , если true и пробел = "все" , если ложь.

    • autoescape ( str ) — Имя функции в шаблоне namespace или None , чтобы отключить экранирование по умолчанию.

    • пробел ( str ) — строка, определяющая обработку пробелов; см. filter_whitespace для опций.

    Изменено в версии 4.3: Добавлен параметр пробел ; устарело compress_whitespace .

    генерировать ( ** kwargs: Any ) → байты [источник]

    Создайте этот шаблон с заданными аргументами.

    класс торнадо.template.BaseLoader( autoescape: str = 'xhtml_escape' , пространство имен : Необязательный [Dict[str, Any]] = Нет , пробел: Необязательный [str] = Нет ) [источник]

    Базовый класс для загрузчиков шаблонов.

    Вы должны использовать загрузчик шаблонов, чтобы использовать такие конструкции шаблонов, как {% расширяет %} и {% включает %} . Загрузчик кэширует все шаблоны после их первой загрузки.

    Создать загрузчик шаблонов.

    Параметры
    • autoescape ( str ) — Имя функции в шаблоне пространства имен, например «xhtml_escape», или None для отключения автоматическое экранирование по умолчанию.

    • пространство имен ( dict ) — словарь, который будет добавлен в шаблон по умолчанию пространство имен или None .

    • пробел ( str ) — Строка, определяющая поведение по умолчанию для пробелы в шаблонах; см. filter_whitespace для опций. По умолчанию «один» для файлов, оканчивающихся на «.html» и «.js» и «все» для других файлов.

    Изменено в версии 4. 3: Добавлен параметр пробел .

    reset () → Нет [источник]

    Сбрасывает кэш скомпилированных шаблонов.

    resolve_path( name: str , parent_path: Optional[str] = None ) → str[source]

    Преобразует возможный относительный путь в абсолютный (для внутреннего использования).

    load( name: str , parent_path: Optional[str] = None ) → Template[source]

    Загружает шаблон.

    class tornado.template.Loader( root_directory: str , **kwargs: Любой )[источник]

    Загрузчик шаблонов, который загружается из одного корневого каталога.

    класс торнадо.template.DictLoader( dict: Dict[str, str] , **kwargs: Any )[источник]

    Загрузчик шаблонов, который загружается из словаря.

    исключение tornado.
    Автор записи

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *