2012-08-10 177 views
0

我有一個用戶列表。我想在模板中顯示它:在Python模板中顯示帶有超鏈接的列表

{%- for user in listed_of_users -%} 
     <P>{{ user.name }}</P> 
     {%- endfor -%} 

我想創建超鏈接到用戶的配置文件使用預定義功能「create_link」每個用戶。該函數將返回每個對象的超鏈接。所以,我寫一個函數象下面這樣:

def users_list(users): 
    return jinja2.Markup('# '.join(map(create_link, users))) 

它會返回一個列表,如:

User1# User2# User3# User4#... 

而且我每個用戶名下有超鏈接。

我在模板中顯示爲使用該語法的字符串:

{{ users_list(listed_of_users)}} 

但是,我想顯示像上面的格式每個用戶。我試過:

{%- for user in users_list(listed_of_users) -%} 
     <P>{{ user }}</P> 
     {%- endfor -%} 

但是,它不起作用。有人可以幫我糾正它嗎? 非常感謝!

+0

隨着

{{用戶}}

。它返回一串HTML文本。

{{user.name}}

,它什麼都不返回。所以這意味着users_list函數已經改變了原來的列表,對吧? – AgainstPIT 2012-08-10 22:21:41

回答

0

一兩件事,在你的榜樣,'# '.join(map(create_link, users))創建了一個很長的字符串,所以你不能在它遍歷你正在嘗試做的方式。你可以寫一個lambda表達式,並做了雙地圖什麼的,但爲什麼不救自己的麻煩,並在你的模板中使用create_link功能,所以如果create_link回報超鏈接有效的HTML,你可以縮短你寫什麼:

{%- for user in listed_of_users -%} 
    <p> {{ user | create_link | safe }} </p> 
{%- endfor -%} 

要進行設置,您需要註冊create_link作爲名爲create_link的過濾器。由於create_link功能只在一個值,你真的只需要添加一行代碼:

environment.filters["create_link"] = create_link 

(其中environment是無論你正在使用,以使您的模板jinja2環境)。作爲獎勵,這意味着你也可以在任何地方使用過濾器。您可以在jinja2 docs on writing custom filters找到更多信息。

+0

非常感謝jeff。我最終使用了另一個內置函數,當時我還沒有發現它。但是這種過濾方式非常有前途。我會更多地瞭解它。 – AgainstPIT 2012-08-11 18:53:05