Python 2.7 TypeError:\uuuu init\uuuu()至少接受4个参数(给定3个)

Python 2.7 TypeError:\uuuu init\uuuu()至少接受4个参数(给定3个),python-2.7,Python 2.7,我正在使用viewlets。我的想法是用我自己的徽标、菜单、地址栏等来覆盖默认的plone站点。我在我自己的createPictMenu.py文件中使用了默认的viewletcode。brundelre3/eggs/plone.app.layout-2.3.4-py2.7.egg/plone/app/layout/viewlets/common.py->class LogoViewlet(ViewletBase)中的代码: 我的createPictMenu.py如下所示 class bdrMen

我正在使用
viewlets
。我的想法是用我自己的徽标、菜单、地址栏等来覆盖默认的plone站点。我在我自己的
createPictMenu.py
文件中使用了默认的
viewlet
code。
brundelre3/eggs/plone.app.layout-2.3.4-py2.7.egg/plone/app/layout/viewlets/common.py->class LogoViewlet(ViewletBase)中的代码:

我的createPictMenu.py如下所示

class bdrMenuView(LogoViewlet):
    template = ViewPageTemplateFile('templates/main_page.pt')

    def __init__(self, context, request, view, manager=None):
        super(ViewletBase, self).__init__(context, request)
        self.__parent__ = view
        self.context = context
        self.request = request
        self.view = view
        self.manager = manager

    def main_page(self):
        return self.template()
这里LogoViewlet是我从common.py继承的类,它位于ovgs文件夹下。 它成功地将plone.logo替换为“我的菜单”。我在
localhost:8086/brunderre3/@@manageviewlets

但是当我运行我的项目时,它显示错误

错误消息:

2013-08-14 11:18:19 ERROR Zope.SiteErrorLog 1376459299.050.254417887359 http://localhost:8086
/brundelre3/main_page.html
Traceback (innermost last):
Module ZPublisher.Publish, line 115, in publish
Module ZPublisher.BaseRequest, line 501, in traverse
Module ZPublisher.BaseRequest, line 346, in traverseName
Module ZPublisher.BaseRequest, line 116, in publishTraverse
Module zope.component._api, line 120, in queryMultiAdapter
Module zope.component.registry, line 238, in queryMultiAdapter
Module zope.interface.adapter, line 532, in queryMultiAdapter
TypeError: __init__() takes at least 4 arguments (3 given)

有人能告诉我这段代码出了什么问题吗?

我看到了一些问题,但是如果没有更多的信息,很难确切知道是哪一个导致了这个错误。我的猜测是,
super
的那一行没有在应该传递
view
参数的时候传递它。我相信这里也有输入错误(应该是
super(bdrMenuView,self)
,而不是
super(ViewletBase,self)

请试用此修订版:

class bdrMenuView(LogoViewlet):
    template = ViewPageTemplateFile('templates/main_page.pt')

    def __init__(self, context, request, view, manager=None):
        super(bdrMenuView, self).__init__(context, request, view)
        self.__parent__ = view
        self.context = context
        self.request = request
        self.view = view
        self.manager = manager

    def main_page(self):
        return self.template()

我不确定这是否是您异常的原因,但我认为您的
super
调用是错误的。第一个参数应该是当前类,它似乎命名为
bdrMenuView
,而不是
ViewletBase
。和的副本