首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平面图4表视图工作

平面图4表视图工作
EN

Stack Overflow用户
提问于 2011-04-08 19:54:59
回答 3查看 475关注 0票数 0

我正在编写一个自定义视图,以绕过错误的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类目前的样子:

代码语言:javascript
复制
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时出现错误。

代码语言:javascript
复制
  <browser:page
      for="*"
      name="new_events_view"
      class=".newEventsView.NewEventsView"
      template="newEventsView.pt"
      permission="zope.Public"
      allowed_interface=".interfaces.INewEventsView"
      />

任何帮助都将不胜感激。

另外,我知道这是一小块代码,但是如果你认为可以用一种更好的方式来完成,我是个学生,我一直在寻找改进的方法。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-09 14:38:07

无论如何,您不应该在浏览器视图的__init__方法中放置任何代码。如果您希望有一些自定义代码,将其放入视图类上的方法中,或者覆盖__call__方法。该视图在安全上下文可用之前实例化,并可能在每个请求中实例化多次。如果你在里面做任何非琐碎的工作,这会带来很多令人惊讶的效果,所以最好不要在里面做任何事情。

在Plone 4中,您可以将自定义__call__编写为:

代码语言:javascript
复制
from zope.publisher.browser import BrowserView

class MyView(BrowserView):

    def __call__(self):
        # do some work
        return super(MyView, self).__call__()
票数 1
EN

Stack Overflow用户

发布于 2011-04-08 21:05:52

一个更好的解决方法是从formatCatalogMetadata.py皮肤层自定义ATContentTypes皮肤脚本。

替换行读数:

代码语言:javascript
复制
if same_type(value, '') and value[4:-1:3] == '-- ::':

通过以下方式:

代码语言:javascript
复制
if same_type(value, '') and (value[4:-1:3] == '-- ::' or value[4:19:3] == '--T::'):

事件视图表再次用于事件。

票数 1
EN

Stack Overflow用户

发布于 2011-04-08 20:57:24

但是它是python

类方法的定义是:

代码语言:javascript
复制
def __init__(context, request):

默认情况下可以理解self (因为该方法被称为Class.__init__(context,request)) (或者再次缩短为Class())。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5600161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档