Установите или выберите флаг для шаблона jinja, чтобы определить, к какому Flask проекту относится маршрут - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь загрузить пользовательскую боковую панель для одного чертежа в моем приложении 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 это просто декоратор, так что скрабы мои попытки найти угол атаки.

...