РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
566 of 643 menu

Событие before_render_template

Событие before_render_template относится к сигналам Flask и срабатывает перед тем, как шаблон будет отрендерен. Оно отправляется с двумя аргументами: sender - приложение Flask, и template - объект шаблона, а также context - словарь контекста, переданный в шаблон. Это событие удобно использовать для добавления или изменения данных, которые должны быть доступны в шаблоне, но ещё не были переданы в него.

Сигнал доступен через объект flask.template_rendered и его подписчиков. Для подключения обработчика используется метод connect, для отключения - disconnect.

Синтаксис

from flask import Flask, template_rendered app = Flask(__name__) @template_rendered.connect_via(app) def handler(sender, template, context, **extra): pass

Или через декоратор connect_via, который автоматически привязывает сигнал к приложению.

Пример

Давайте создадим простое приложение, которое при рендеринге шаблона добавляет в контекст дополнительную переменную extra_text:

from flask import Flask, render_template, template_rendered app = Flask(__name__) @template_rendered.connect_via(app) def before_render(sender, template, context, **extra): context['extra_text'] = 'hello from signal' @app.route('/') def index(): return render_template('index.html')

Шаблон index.html:

<p>{{ extra_text }}</p>

Результат выполнения кода:

<p>hello from signal</p>

Пример

Давайте изменим контекст шаблона в зависимости от того, какой шаблон рендерится:

from flask import Flask, render_template, template_rendered app = Flask(__name__) @template_rendered.connect_via(app) def before_render(sender, template, context, **extra): if template.name == 'index.html': context['title'] = 'article' else: context['title'] = 'user' @app.route('/') def index(): return render_template('index.html') @app.route('/user') def user(): return render_template('user.html')

Шаблон index.html:

<h1>{{ title }}</h1>

Шаблон user.html:

<h1>{{ title }}</h1>

Результат выполнения кода для адреса /:

<h1>article</h1>

Результат выполнения кода для адреса /user:

<h1>user</h1>

Смотрите также

  • событие template_rendered,
    которое срабатывает после рендеринга шаблона
  • метод connect,
    который подключает обработчик к сигналу
  • метод disconnect,
    который отключает обработчик от сигнала
  • класс Signal,
    который представляет собой сигнал Flask
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить