我们有一个名为@@export
的视图,需要一个可选参数version
,因此您可以像@@export?version=3
一样调用它。
由于每个版本可以彼此完全不同,执行一个巨大的模板以将所有版本保持在一起将是一个维护的噩梦,所以我们认为在BrowserView的__call__
方法上我们可以动态地改变使用的模板,如下所示:
class MyView(BrowserView):
template = ViewPageTemplateFile('default_template.pt')
def __call__(self):
version = self.request.get('version', None)
if version is not None:
self.template = ViewPageTemplateFile('export-{0}.pt'.format(version))
return self.template()
原来它不起作用。但实际上尝试使用调试控制台我们就这样工作了:
class MyView(BrowserView):
template = ViewPageTemplateFile('default_template.pt')
def __call__(self):
version = self.request.get('version', None)
if version is not None:
self.template = ViewPageTemplateFile('export-{0}.pt'.format(version))
return self.template(self)
return self.template()
注意if代码路径的返回。
是否有其他方法可以动态更改正在使用的模板?因为return self.template(self)
对我来说似乎并不理智。
答案 0 :(得分:0)
您可以尝试将逻辑放入 init 方法而不是调用方法,但我建议为每个目的创建单独的页面并从主节点遍历它们页。通过zcml:pages共享页面的元信息(界面,权限)很容易。