0

我有一个用户列表。我想在模板中显示它:

{%- 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 -%}

但是,它不起作用。有人可以帮我纠正吗?非常感谢!

4

1 回答 1

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

(您用来渲染模板的环境在哪里)environmentjinja2作为奖励,这意味着您还可以在任何地方使用过滤器。您可以在有关编写自定义过滤器的 jinja2 文档中找到更多信息。

于 2012-08-11T04:35:39.083 回答