gpt4 book ai didi

view - Plone 4 中的自定义编辑 View

转载 作者:行者123 更新时间:2023-12-04 22:24:40 25 4
gpt4 key购买 nike

我创建了一个自定义内容类型(简历),我希望提供一个自定义的“编辑” View 。我的用例非常简单,我只想在编辑表单之前显示一个 HTML“免责声明”框。

首先我复制了:

Products/ATContentTypes/skins/ATContentTypes/atct_edit.cpt
Products/ATContentTypes/skins/ATContentTypes/atct_edit.cpt.metadata

进入 my/product/browser/ as
my/product/browser/resumeedit.cpt
my/product/browser/resumeedit.cpt.metadata

然后我在 my/product/browser/configure.zcml 中定义了一个新的 browser:page 节:
  <browser:page
for="..interfaces.IResume"
name="resume_edit"
class=".resumeview.ResumeEdit"
template="resumeedit.cpt"
permission="cmf.ModifyPortalContent"
/>

my/product/browser/resumeview.py 中的简历类很简单:
class ResumeEdit(BrowserView):
""" A customization of the Resume Edit form
"""
__call__ = ViewPageTemplateFile('resumeedit.cpt')

最后,我更改了 my/product/profiles/default/types/Resume.xml 中“edit”的默认别名:
  <alias from="edit" to="resume_edit" />

安装后,添加或编辑 Resume 内容类型会引发此异常:
Unauthorized: The container has no security assertions.  Access to 'id' of (Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 0x1e8b7a50) denied.

这可以通过提供 edit_macros.pt 的修补版本来缓解:
85c85
< tal:attributes="action python:context.absolute_url()+'/'+template.id;
---
> tal:attributes="action python:context.absolute_url()+'/'+path('template/getId|nothing');
203c203
< tal:attributes="value python:(last_referer and '%s/%s' % (context.absolute_url(), template.id) not in last_referer) and last_referer or (context.getParentNode() and context.getParentNode().absolute_url())"
---
> tal:attributes="value python:(last_referer and '%s/%s' % (context.absolute_url(), path('template/getId|nothing')) not in last_referer) and last_referer or (context.getParentNode() and context.getParentNode().absolute_url())"

尽管如此,这仍会引发以下异常('id-64121786' 是我的简历项目的 ID):
  Module zope.tales.tales, line 696, in evaluate
- URL: file:/home/zope/env26/plone-devel/eggs/Products.Archetypes-1.6.5-py2.6.egg/Products/Archetypes/skins/archetypes/widgets/field.pt
- Line 63, Column 4
- Expression: <PythonExpr errors.get(fieldName)>
- Names:
{'args': (),
'container': <Resume at /cms/id-64121786>,
'context': <Resume at /cms/id-64121786>,
'default': <object object at 0x8e094c0>,
'here': <Resume at /cms/id-64121786>,
'loop': {},
'nothing': None,
'options': {},
'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x126e7470>,
'request': <HTTPRequest, URL=http://localhost:8081/cms/id-64121786/resume_edit>,
'root': <Application at >,
'template': <Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 0x117da910>,
'traverse_subpath': [],
'user': <PloneUser 'admin'>,
'view': <Products.Five.metaclass.SimpleViewClass from /home/zope/env26/plone-devel/src/my.product/my/product/browser/resumeedit.cpt object at 0x126d8c90>,
'views': <Products.Five.browser.pagetemplatefile.ViewMapper object at 0x126d8fd0>}
Module Products.PageTemplates.ZRPythonExpr, line 49, in __call__
- __traceback_info__: errors.get(fieldName)
Module PythonExpr, line 1, in <expression>
Module AccessControl.ImplPython, line 688, in guarded_getattr
AttributeError: 'NoneType' object has no attribute 'get'

如何解决此问题并为我的内容类型的编辑 View 提供我自己的自定义模板?

最佳答案

我建议不要复制 atct_edit.cpt。您真正需要做的就是配置一个编辑模板(看起来您知道该怎么做),然后覆盖相应的部分。有关更多信息,请参阅文档 here

另外,我会先从一个完全空白的编辑模板开始。然后在其中放入一些有效的 XHTML,例如Hello world! 并确保您可以通过单击编辑按钮加载编辑模板。

关于view - Plone 4 中的自定义编辑 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5885420/

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