moonz
@moonz
web developer | seo | design

Flask jinja2 extends как передать данные в базовый шаблон?

Всем привет. Ситуация следующая.
Есть базовый шаблон, в котором определена шапка. В этой шапке есть уведомления, это динамический список который должен выводить информацию о новых уведомлениях пользователя.
Поскольку шапка для всех страниц одинаковая, было логично использовать её как базовый шаблон, и расширять его на необходимые страницы.
Проблема заключается в том, что данный шаблон нигде не вызывается, следовательно я не могу передать в него данные из бд, поскольку шаблонизатор должен получать данные явным образом при render_template.

Вопрос в том, каким образом я могу заранее отрсиовать шапку передав туда данные? Или мне нужно для каждой страницы в render_template передавать данные это явно не правильная реализация.
  • Вопрос задан
  • 643 просмотра
Решения вопроса 1
moonz
@moonz Автор вопроса
web developer | seo | design
Ответ помогли найти на ru.stackoverflow

from flask import Blueprint

from utils import db_connect

app = Blueprint("name", __name__, template_folder='templates')

@app.route("/")
def index():
  return render_template("index.html")

@app.context_processor
def any_data_processor():
  with db_connect.connect() as con: 
# тут же могла быть работа с кешем/API/файловой системой и др.
    ....
  result = ...
  return dict(any_data=result)

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

{{ any_data }}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@iddqda
network engineer, netdevops
наверное как то так можно:
https://realpython.com/primer-on-jinja-templating/...
еще можно зарезервировать блок в шапке и данные туда пихать с помощью JS
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы