我有一个自定义模板,用于使用BrowserView定义的新闻项覆盖Plone皮肤层中的默认模板。我们还安装了CMFEditions。尝试查看以前的修订会导致错误,如Plone bug中所述。我们正在升级到Plone 3.3.6,因此“修复”描述了现有的但我仍然看到“查看此修订版”链接,但仍然会导致错误
Traceback (innermost last):
Module ZPublisher.Publish, line 119, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 42, in call_object
Module Shared.DC.Scripts.Bindings, line 313, in __call__
Module Products.PloneHotfix20110531, line 106, in _patched_bindAndExec
Module Shared.DC.Scripts.Bindings, line 350, in _bindAndExec
Module Products.CMFCore.FSPageTemplate, line 216, in _exec
Module Products.CacheSetup.patch_cmf, line 51, in FSPT_pt_render
Module Products.CacheSetup.patch_cmf, line 126, in PT_pt_render
- Warning: Macro expansion failed
- Warning: exceptions.KeyError: 'view_macro'
Module zope.tal.talinterpreter, line 271, in __call__
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 891, in do_useMacro
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 957, in do_defineSlot
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 861, in do_defineMacro
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 957, in do_defineSlot
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 949, in do_defineSlot
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 855, in do_condition
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 822, in do_loop_tal
Module zope.tales.tales, line 685, in setRepeat
Module zope.tales.tales, line 101, in __init__
TypeError: iteration over non-sequence
我的问题是如何更改模板以使其正常工作。 BrowserView使用的模板文件与原始文件紧密匹配,并定义了一个主宏。我很确定它没有问题,好像我用以下空白模板替换它我仍然得到完全相同的错误。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
lang="en"
metal:use-macro="context/main_template/macros/master"
i18n:domain="plone">
<body>
<div metal:fill-slot="main">
<tal:main-macro metal:define-macro="main">
</tal:main-macro>
</div>
</body>
</html>
使用Products.PDBDebugMode我可以进一步调试并找到
TypeError: iteration over non-sequence
> c:\plone\parts\zope2\lib\python\zope\tales\tales.py(101)__init__()
-> self._iter = i = iter(seq)
(Pdb) a
self = <Products.PageTemplates.Expressions.PathIterator object at 0x0B2FE350>
name = vdata
seq = <Products.CMFEditions.ZVCStorageTool.ShadowHistory object at 0x0B28C370>
context = <Products.PageTemplates.Expressions.ZopeContext object at 0x0B2E3DD0>
seq这里没有 iter 或 getitem 方法,所以iter()会引发TypeError。此错误源自versions_history_form.pt
<tal:block repeat="vdata history">
答案 0 :(得分:2)
此错误与Plone错误中的错误不同。这种情况正在发生,因为你有一个tal:repeat
某处试图循环不是序列(或其他迭代器)的东西。
答案 1 :(得分:0)
很抱歉看起来这是我的代码中的错误,而不是其他任何错误。我覆盖了模板,错误源于覆盖的代码位 - 我没有正确地同步Plone 3.3.6中的更改。
这个问题应该被删除