我正在编写一个自定义视图,以绕过错误的bug,在Plone 4中的表视图中显示事件的错误开始和结束时间。然而,当我调用我的视图时,会得到以下错误:
回溯(最里面的最后): 模块ZPublisher.Publish,第116行,在发布中 模块ZPublisher.BaseRequest,第498行,以导线表示 模块ZPublisher.BaseRequest,第343行,traverseName 模块ZPublisher.BaseRequest,第110行,publishTraverse 模块zope.component._api,第122行,queryMultiAdapter 模块zope.component.registry,第240行,queryMultiAdapter 模块zope.interface.adapter,第522行,queryMultiAdapter TypeError:
__init__()只接受2个参数(3个给定)
我已经有一段时间没有创建视图了,但我认为(按照这),__init__()确实包含3个参数(self、context、request)。无论如何,下面是我的BrowserView类目前的样子:
class NewEventsView(BrowserView):
"""Custom View for displaying events in a table with correct times"""
implements(INewEventsView)
def getCurrentEvents(self):
"""Method to return all active events in order"""
current_events = []
cat = getToolByName(self.context, 'portal_catalog')
brains = cat(portal_type='Event', review_state='published', sort_on='start')
for x in brains:
event = x.getObject()
if event.startDate > DateTime():
current_events.append(event)
return current_events我尝试过添加一个__init__的不同变体,就像上面提到的页面显示的那样,为了让它得到一个__init__(self, context):,我只想看看两个参数是否真的会改变任何事情,并给出完全相同的错误。
我正在Mac雪豹上的plone4.0.2站点上测试这一点(在python2.6.6虚拟版中)
从browser/ BrowersView .with注册(我把它放到了我也在处理的主题中)。我调用视图来查看视图的外观,并获得上述错误。我还尝试在portal_types中为主题注册视图,在移除视图之前,它会给我导航到http://localhost:8080/plone/events时出现错误。
<browser:page
for="*"
name="new_events_view"
class=".newEventsView.NewEventsView"
template="newEventsView.pt"
permission="zope.Public"
allowed_interface=".interfaces.INewEventsView"
/>任何帮助都将不胜感激。
另外,我知道这是一小块代码,但是如果你认为可以用一种更好的方式来完成,我是个学生,我一直在寻找改进的方法。
谢谢
发布于 2011-04-09 14:38:07
无论如何,您不应该在浏览器视图的__init__方法中放置任何代码。如果您希望有一些自定义代码,将其放入视图类上的方法中,或者覆盖__call__方法。该视图在安全上下文可用之前实例化,并可能在每个请求中实例化多次。如果你在里面做任何非琐碎的工作,这会带来很多令人惊讶的效果,所以最好不要在里面做任何事情。
在Plone 4中,您可以将自定义__call__编写为:
from zope.publisher.browser import BrowserView
class MyView(BrowserView):
def __call__(self):
# do some work
return super(MyView, self).__call__()发布于 2011-04-08 21:05:52
一个更好的解决方法是从formatCatalogMetadata.py皮肤层自定义ATContentTypes皮肤脚本。
替换行读数:
if same_type(value, '') and value[4:-1:3] == '-- ::':通过以下方式:
if same_type(value, '') and (value[4:-1:3] == '-- ::' or value[4:19:3] == '--T::'):事件视图表再次用于事件。
发布于 2011-04-08 20:57:24
但是它是python!
类方法的定义是:
def __init__(context, request):默认情况下可以理解self (因为该方法被称为Class.__init__(context,request)) (或者再次缩短为Class())。
https://stackoverflow.com/questions/5600161
复制相似问题