Я пытаюсь загрузить пользовательскую боковую панель для одного чертежа в моем приложении Flask; все маршруты в этом проекте должны по умолчанию использовать эту пользовательскую боковую панель. Я считаю, что все шаблоны по всем чертежам могут наследоваться от одного и того же верхнего уровня base.html
, но с некоторой простой проверкой if / else, при которой вызывается include
. Я думаю, что это должно быть так просто:
{% if some_test_for_blueprint %}
{% include 'special_cased_sidebar.html' %}
{% else %}
{% include 'standard_sidebar.html' %}
{% endif %}
в base.html
, но я действительно изо всех сил пытаюсь найти, что может быть some_test_for_blueprint
- есть ли существующий хук, который я мог бы поймать, или какой-то флаг Я могу зарегистрироваться на этом конкретном проекте.
Я пробовал несколько подходов, включая bp.add_app_template_global
, оба в __init__.py
самого проекта:
from flask import Blueprint
bp = Blueprint('production', __name__)
bp.add_app_template_global(lambda: True, 'is_production')
from app.production import routes
а также после регистрации проекта в основном приложении __init__.py
например:
from app.production import bp as production
app.register_blueprint(production, url_prefix='/production')
production.add_app_template_global(lambda: True, 'is_production')
Я предполагаю , что f
из документов должно быть вызвано, но Я тоже пробовал без lambda
. В любом случае, я могу получить доступ к is_production
в самом шаблоне, но, похоже, он установлен глобально для всех чертежей. Даже если это вызываемый объект, и я вызываю его с помощью {{ is_production() }}
, и даже если я добавлю False
возвращаемое значение для всех остальных чертежей.
Я здесь упускаю что-то простое; Как я могу заставить моего простого Джинджу работать, если / еще для всех маршрутов одного чертежа?
РЕДАКТИРОВАТЬ:
Теперь для меня очевидно, что add_app_template_global
это просто декоратор, так что скрабы мои попытки найти угол атаки.