2012-07-25 45 views
0

我對Zope和Plone很新穎。我正在嘗試在index_html頁面中編寫python代碼。我有人類的對象列表,現在我想對它們重新排序。所以,我收到了:如何在zope頁面模板中編寫python代碼

<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代碼的方式。有什麼辦法可以使用這段代碼來改變列表的順序嗎?

+0

''語法根本不受Zope頁面模板的支持。你在哪裏找到這個語法? – 2012-07-25 13:44:23

+0

我從www.mail-archive.com/[email protected]/msg00046.html找到它。我意識到,如果我將這些人更改爲python代碼中的new_persons並嘗試在中訪問它,它不知道這個new_person!我想我應該在其他地方寫這個python代碼。目前我正在將它寫入瀏覽器模板!我應該在哪裏編寫此代碼,以及如何在模板上訪問此代碼? – 2012-07-25 13:47:27

+1

啊,這是有人*問*的功能,而不是描述ZPT可以做什麼。 :-) – 2012-07-25 13:49:17

回答

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做按摩名單爲您。

+0

謝謝你的回答! – 2012-07-25 13:56:58

+0

但是,在視圖中處理邏輯是否是一種很好的做法?你在哪裏定義Person.py類中的「sortable_title」? – 2012-07-25 14:08:51

+0

最好將邏輯推送到視圖,但少量的排序等可以在模板中處理。 – 2012-07-25 14:12:03