2012-08-10 32 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