gpt4 book ai didi

Plone/Zope/Z3c-什么会导致publishTraverse到 "not find the page?"

转载 作者:行者123 更新时间:2023-12-01 22:23:19 25 4
gpt4 key购买 nike

我正在尝试获取 z3c form.Form 来填写其信息,而不是在 url 中创建 get 参数,我想使用publishTraverse。

这是我的代码的一部分:

my_object_view.py:

class EditMyObject(form.Form):
fields = field.Fields(IMyObject)
ignoreContext = False

myObjectID = None

def publishTraverse(self, request, name):
print "Is this firing?"
if self.myObjectID is None:
self.myObjectID = name
return self
else:
raise NotFound()

def updateWidgets(self):
super(EditMyObject,self).updateWidgets()
#set id field's mode to hidden

def getContent(self):

db_utility = queryUtility(IMyObjectDBUtility, name="myObjectDBUtility")
return db_utility.session.query(MyObject).filter(MyObject.My_Object_ID==self.myObjectID).one()

#Button handlers for dealing with form also added

.....
from plone.z3cform.layout import wrap_form
EditMyObjectView = wrap_form(EditMyObject)

在浏览器文件夹中的configure.zcml 文件中:

<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:five="http://namespaces.zope.org/five"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
xmlns:zcml="http://namespaces.zope.org/zcml"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="my.object">

<browser:page
name="myobject-editform"
for="*"
permission="zope2.View"
class=".my_object_view.EditMyObjectView"
/>

</configure>

当我在 url 中使用 get 参数时,我能够让它工作,但是当我尝试使用publishTraverse时,我收到页面未找到错误。奇怪的是当

当我尝试使用发布遍历时,这就是我的网址的样子:

http://localhost:8190/MyPloneSite/@@myobject-editform/1

当我省略 1,但保留“/”时,它仍然会找到该页面。我做错了什么导致这个?

最佳答案

除非您声明 View 提供 IPublishTraverse 接口(interface),否则 Zope 发布者不会调用publishTraverse。您需要将其添加到您的类(class)中:

from zope.publisher.interfaces.browser import IPublishTraverse
from zope.interface import implementer

@implementer(IPublishTraverse)
class EditMyObject(form.Form):
etc...

您还需要摆脱包装 View 。使用包装器,Zope 遍历包装器,检查它是否提供 IPublishTraverse,发现没有,然后放弃。相反,只需将表单直接注册为 View 即可:

<browser:page
name="myobject-editform"
for="*"
permission="zope2.View"
class=".my_object_view.EditMyObject"
/>

关于Plone/Zope/Z3c-什么会导致publishTraverse到 "not find the page?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27852615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com