首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:__init__()至少接受4个参数(给定3个)

TypeError:__init__()至少接受4个参数(给定3个)
EN

Stack Overflow用户
提问于 2013-08-14 14:11:33
回答 1查看 4.8K关注 0票数 0

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

我的createPictMenu.py看起来像这样

代码语言:javascript
复制
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继承的类,它在eggs文件夹下。它成功地用我的菜单替换了plone.logo。我在localhost:8086/brundelre3/@@manage-viewlets下看到的

但是当我运行我的项目localhost:8086/brundelre3/main_page.html时,它显示错误

错误消息:

代码语言:javascript
复制
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)

有人能说出这段代码出了什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2016-07-29 04:13:41

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

试试这个修订后的版本:

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18224386

复制
相关文章

相似问题

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