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...

Другие вопросы по тегам