Включайте переменные в контекст шаблона на каждой странице с Bottle.py - PullRequest
7 голосов
/ 18 марта 2012

Есть ли в Bottle.py эквивалент контекстных процессоров, которые вы получаете во Flask?

Ответы [ 3 ]

4 голосов
/ 20 мая 2012

Если вы используете Vanilla Bottle с SimpleTemplate, есть решение, на которое я наткнулся.

Для моего сайта мне нужен был доступ к некоторым функциям в каждом шаблоне, app.get_url, очевидно, одна из них. Это сработало для меня:

# after app creation, but before the views
SimpleTemplate.defaults["get_url"] = app.get_url
SimpleTemplate.defaults["url"] = lambda: request.url
SimpleTemplate.defaults["fullpath"] = lambda: request.fullpath
SimpleTemplate.defaults["sorted"] = sorted

Это работает с Бутылки 0.9, я не тестировал более свежие версии фреймворка.

Это поведение недокументировано, но Марсель Хеллкамп объяснил это в этой теме . Там также упоминаются другие решения:

  • Передайте глобалы в _vars или аналогичном шаблоне arg.
  • Создать декоратор для предоставления значений по умолчанию.

Кроме того, в бутылке 0.10 в пространство имен шаблона SimpleTemplate были добавлены новые функции: defined, get и setdefault

0 голосов
/ 10 июля 2018

Используя предыдущий ответ из Хельги , я использую этот хук для создания процессора контекста, такого как (бутылка 0.12.x):

import bottle


@bottle.hook('before_request')
def _context_processor():
    bottle.SimpleTemplate.defaults['foo'] = 'F00'
    bottle.SimpleTemplate.defaults['bar'] = 'B@R'
0 голосов
/ 03 октября 2014

Примечание : это же решение можно использовать с другими шаблонизаторами.Техника точно такая же, но вы используете BaseTemplate (он работает для всех шаблонных классов) или класс для движка, который вы хотите использовать.

...