Я старался понять это, но не могу полностью указать на точные документы об этом. Я довольно смущен по поводу различного смысла контекста в этой настройке Python Pyramid + Mako.Python + Pyramid + Mako: В чем разница между контекстом в событии, контекстом в контексте и контекстом в шаблоне?
Вот некоторые фрагменты кода (скажите мне, если вам нужно больше контекст):
class Root(object):
request = None
def __init__(self, request):
self.request = request
@events.subscriber(events.BeforeRender)
def add_renderer_globals(event):
event[u'c'] = event[u'request'].tmpl_context
print u"add_renderer_globals(): request.tmpl_context={0}".format(event[u'request'].tmpl_context)
print u"add_renderer_globals(): context={0}".format(event[u'context'])
@view.view_config(route_name='login', request_method='GET', renderer='login.mako')
def login_get(context, request):
print u"login_get(): context={0}".format(context)
return {}
[...]
cfg = config.Configurator(root_factory=Root,
package=MyPKG,
settings=settings,
session_factory=pyramid_beaker.session_factory_from_settings(settings),
)
cfg.add_route(name='login', pattern='/login')
cfg.scan()
и в моем мако шаблоне, просто есть пример, у меня только:
Mako template context=${context}
Итак, я сделал бы запрос, и я получаю следующие выходы из консоли или браузера:
login_get(): context=<MyPKG.Root object at 0x1523c90>
add_renderer_globals(): request.tmpl_context=<pyramid.request.TemplateContext object at 0x12fbc50>
add_renderer_globals(): context=<MyPKG.Root object at 0x1523c90>
Mako template context=<mako.runtime.Context object at 0x15a4950>
Мой вопрос: в чем отличия, и для чего вы их используете? Я также смущен, почему семантически, я объявил root_factory
=MyPKG.Root
и будет context
=MyPKG.Root
на мой взгляд и мой подписчик.
Спасибо за любой намек, чтобы помочь мне разобраться.
Я считаю, что никто еще будет думать лучшее объяснение, так что я буду принимать этот ответ, как он отвечает на мои вопросы – Danosaure
@ майкл-merickel:.. Можно ли найти эту информацию в pyramid doc? Если нет, следует ли обновить его? Thx! – Hadrien
afaik '_context' недокументирован. https://github.com/Pylons/pyramid/issues/530, однако' request.tmpl_context' служит очень малоцелевой цели и на данный момент он устарел. –