如何在zope页面模板中编写python代码

时间:2012-07-25 12:43:53

标签: plone zope template-tal zpt

我对Zope和Plone很新。我试图在index_html页面中编写python代码。我有person类型的对象列表,现在我想重新排序它们。所以,我以前拥有的是:

<ul tal:define="persons python: context.portal_catalog(portal_type='Person');">
<tal:listing repeat="p persons">

现在我在<tal:listing ...

之前有这个python代码
<?python
  order=[0,2,1]
  persons = [persons[i] for i in order]
?>

但不知何故,这个人的秩序仍然是一样的。另外,我也不喜欢这种在视图中编写python代码的方式。有什么办法可以使用这段代码来改变列表的顺序吗?

1 个答案:

答案 0 :(得分:4)

Zope pagetemplates根本不支持<? ?>语法。

但是,您可以在tal:repeat中循环遍历您的python列表:

<ul tal:define="persons python: context.portal_catalog(portal_type='Person');">
    <tal:listing repeat="i python:[0, 2, 1]">
        <li tal:define="p python:persons[i]" tal:content="p/name">Person name</li>
    </tal:listing>
</ul>

但我怀疑,您希望让portal_catalog使用sort_on参数进行排序(请参阅Plone KB article on the catalog):

<ul tal:define="persons python: context.portal_catalog(portal_type='Person', sort_on='sortable_title');">
    <tal:listing repeat="p persons">
        <li tal:content="p/name">Person name</li>
    </tal:listing>
</ul>

如果您想做更复杂的事情,请使用browser view为您进行列表按摩。