我正在编写一些测试,我需要在视图中使用模板而不使用文件(例如,通过ViewPageTemplateFile
)。模板必须计算tal表达式并访问视图的函数。这是我目前的问题。我在计算PageTemplate中的view
时出错。我不确定我的代码是否遵循最佳实践。在
from plone.app.testing import TEST_USER_NAME, TEST_USER_PASSWORD
from plone.testing.z2 import Browser
from zope.component import getGlobalSiteManager
from zope.publisher.interfaces.browser import IBrowserView
from Products.Five.browser import BrowserView
from zope.pagetemplate.pagetemplate import PageTemplate
class MyView(BrowserView):
def __init__(self, context, request):
self.context = context
self.request = request
def render(self):
template = PageTemplate()
text = '''\
<div tal:on-error="string:view fails"><span tal:replace="view/var"/></div>
<div tal:on-error="string:python fails"><span tal:replace="python:'python works'"/></div>
'''
template.write(text)
return template()
def __call__(self):
return self.render()
def var(self):
return 'my_value'
global_site_manager = getGlobalSiteManager()
global_site_manager.registerAdapter(MyView, (None, None), IBrowserView, 'my_view')
browser=Browser(app.Plone)
browser.addHeader('Authorization',
'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD))
browser.open(app.Plone.absolute_url() + '/@@my_view')
print browser.contents
产生以下输出:
^{pr2}$
到目前为止,我的解决方法是创建我自己的}填充命名空间。在
class MyPageTemplate(PageTemplate)
,在构造函数中将视图的实例作为参数传递,并重写pt_getContext
,用实例中的view
、context
和{我想知道是否有更好的解决办法(最佳做法)。在
这里是我的解决方法:
相关问题 更多 >
编程相关推荐