【发布时间】:2012-03-09 23:19:34
【问题描述】:
我一直在努力理解这一点,但无法完全确定有关它的精确文档。我对这个 Python Pyramid+Mako 设置中上下文的不同含义感到很困惑。
这是一些代码 sn-ps(如果您需要更多 context,请告诉我):
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 模板中,举个例子,我只有:
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。
感谢您提供任何帮助我理解的提示。
【问题讨论】: