我对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
order=[0,2,1]
persons = [persons[i] for i in order]
?>
但不知何故,这个人的秩序仍然是一样的。另外,我也不喜欢这种在视图中编写python代码的方式。有什么办法可以使用这段代码来改变列表的顺序吗?
答案 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为您进行列表按摩。