我有一个关于Plone的研究员档案的宏,如果所需的文件夹不存在,我想适应不显示任何内容。就像现在一样,如果“selected-publications”文件夹不存在,则会抛出错误。如果“context / selected-publications / ...”为空或不存在,是否可以使宏显示为空?这是我到目前为止的代码:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" i18n:domain="RDSLocal">
<body>
<div id="publications" metal:define-macro="publications" tal:omit-tag="">
<!--publications-->
<a href="selected-publications"><h2>Publications</h2></a>
<ul style="list-style: none; margin-left: 0px; margin-right: 0px;">
<tal:block tal:repeat="publication context/selected-publications/getFolderContents">
<li><tal:block tal:content="publication/Authors"/> (<tal:block tal:content="publication/publication_year"/>) <a tal:attributes="href publication/getURL" tal:content="publication/Title"/></li><br />
</tal:block>
</ul>
</div>
</body>
</html>
答案 0 :(得分:4)
使用tal:define
和tal:condition
获取并检查发布的内容,然后再使用tal:repeat
进行迭代。将您的代码逐字记录为基线:
<div id="publications" metal:define-macro="publications" tal:omit-tag="">
<!--publications-->
<a href="selected-publications"><h2>Publications</h2></a>
<ul style="list-style: none; margin-left: 0px; margin-right: 0px;"
tal:define="publications nocall:context/selected-publications|nothing"
tal:condition="publications">
<tal:block tal:repeat="publication publications/getFolderContents">
<li><tal:block tal:content="publication/Authors"/>
(<tal:block tal:content="publication/publication_year"/>)
<a tal:attributes="href publication/getURL"
tal:content="publication/Title"/></li><br />
</tal:block>
</ul>
</div>
这是Zope templates中常见的习语。如果你查看Plone的源代码,你会发现这个技术的例子,你可以掠夺。
如果没有出版物,也许你想要隐藏H2
?如果是这样,请将tal:define
和tal:condition
改为div
。
你是否从其他模板中调用了这个?如果没有,则无需将代码段定义为宏。