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

Метод context_processor

Метод context_processor применяется к объекту blueprint и регистрирует функцию, возвращающую словарь с переменными. Эти переменные становятся доступны во всех Jinja-шаблонах, которые рендерятся внутри маршрутов данного blueprint. Функция-обработчик не принимает аргументов и должна возвращать словарь. Метод можно вызвать несколько раз, тогда словари от разных функций объединяются.

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

Синтаксис

@bp.context_processor def func(): return dict_var

Пример

Давайте создадим blueprint и зарегистрируем контекстный процессор, который передаёт в шаблон переменную site_name:

from flask import Flask, Blueprint, render_template app = Flask(__name__) bp = Blueprint('bp', __name__) @bp.context_processor def inject_site(): return {'site_name': 'abcde'} @bp.route('/') def index(): return render_template('index.html') app.register_blueprint(bp)

Теперь создадим шаблон, который использует эту переменную:

<p>{{ site_name }}</p>

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

<p>abcde</p>

Пример

Давайте зарегистрируем два контекстных процессора и посмотрим, как объединяются их словари:

from flask import Flask, Blueprint, render_template app = Flask(__name__) bp = Blueprint('bp', __name__) @bp.context_processor def inject_user(): return {'user': 'user'} @bp.context_processor def inject_article(): return {'article': 'article'} @bp.route('/') def index(): return render_template('index.html') app.register_blueprint(bp)

Создадим шаблон, который выводит обе переменные:

<p>{{ user }}</p> <p>{{ article }}</p>

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

<p>user</p> <p>article</p>

Пример

Давайте передадим в шаблон список значений и выведем его через цикл:

from flask import Flask, Blueprint, render_template app = Flask(__name__) bp = Blueprint('bp', __name__) @bp.context_processor def inject_items(): return {'items': ['a', 'b', 'c', 'd', 'e']} @bp.route('/') def index(): return render_template('index.html') app.register_blueprint(bp)

Создадим шаблон, который перебирает элементы списка:

{% for item in items %} <p>{{ item }}</p> {% endfor %}

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

<p>a</p> <p>b</p> <p>c</p> <p>d</p> <p>e</p>

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

  • класс Blueprint,
    который создаёт группу маршрутов приложения
  • метод route,
    который регистрирует маршрут внутри blueprint
  • метод template_filter,
    который регистрирует фильтр Jinja для blueprint
  • метод template_global,
    который регистрирует глобальную функцию Jinja
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить