Turbogears2: аналог контекстных процессоров django
Есть ли какой-нибудь аналог контекстных процессоров django в turbogears2? В tg1 был stdvars, но больше не в tg2.
Объяснение: мне нужно иметь несколько шаблонных тегов, доступных на каждой странице, без явного объявления в каждом контроллере.
2 ответа
У вас есть три возможных решения для достижения этой цели.
Сначала вы можете использовать tg.tmpl_context
который доступен внутри каждого шаблона как tmpl_context
, Вы можете заполнить переменные внутри BaseController.__call__
так что они доступны везде.
Другой подход заключается в регистрации base_config.variable_provider
внутри app_cfg.py
которая должна быть функцией, которая возвращает словарь переменных, которые будут доступны внутри любого шаблона. Эти переменные будут переопределены из возвращаемых контроллером, если есть конфликт имен, так что это хороший способ предоставить значения по умолчанию для возвращаемых контроллером переменных.
В противном случае в последних версиях также можно зарегистрировать before_render
подключить по всей системе, используя base_config.register_hook
внутри app_cfg.py
обратный вызов может добавить и переопределить любой параметр шаблона.
Я не уверен, что это будет лучшим способом сделать это, но вы можете добавить следующее в app_globals.Global:
from genshi.core import Markup
self.foo = lambda: Markup("<div>my content here!!!</div>")
а затем в ваших ваших шаблонах:
${g.foo()}
или вы можете сделать это через запрос AJAX...