Turbogears2: аналог контекстных процессоров django - PullRequest
0 голосов
/ 27 октября 2011

Есть ли в turbogears аналог контекстных процессоров django2? В tg1 был stdvars, но больше не в tg2.

Разъяснение: Мне нужно иметь несколько шаблонных тегов, доступных на каждой странице, без явного объявления в каждом контроллере.

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

У вас есть три возможных решения для достижения этой цели.

Сначала вы можете использовать tg.tmpl_context, который доступен внутри каждого шаблона как tmpl_context. Вы можете заполнить переменные внутри BaseController.__call__, чтобы они были доступны везде.

Другой подход заключается в регистрации base_config.variable_provider внутри app_cfg.py, которая должна быть функцией, которая возвращает словарь переменных, который будет доступен внутри любого шаблона. Эти переменные будут переопределены из возвращенных контроллером значений при наличии конфликта имен, поэтому это хороший способ указать значения по умолчанию для возвращаемых контроллером переменных.

В противном случае в последних версиях также можно зарегистрировать хук before_render в масштабе всей системы, используя base_config.register_hook внутри app_cfg.py, обратный вызов может добавить и переопределить любой параметр шаблона.

1 голос
/ 21 ноября 2011

Я не уверен, что это будет лучший способ сделать это, но вы можете добавить следующее в app_globals.Global:

from genshi.core import Markup
self.foo = lambda: Markup("<div>my content here!!!</div>")

и затем в ваших ваших шаблонах:

${g.foo()}

или вы можете сделать это с помощью ajax-запроса ...

...