如何在 jinja python 模板中输出逗号分隔列表?

Posted

技术标签:

【中文标题】如何在 jinja python 模板中输出逗号分隔列表?【英文标题】:How to output a comma delimited list in jinja python template? 【发布时间】:2012-08-12 01:03:50 【问题描述】:

如果我有users 的列表,比如["Sam", "Bob", "Joe"],我想做一些可以在我的 jinja 模板文件中输出的事情:

% for user in userlist %
    <a href="/profile/ user /"> user </a>
    % if !loop.last %
        , 
    % endif %
% endfor %   

我想让输出模板为:

Sam, Bob, Joe

我尝试了上面的代码来检查它是否在循环的最后一次迭代中,如果不是,则不要插入逗号,但它不起作用。我该怎么做?

【问题讨论】:

jinja 和 Python 一样,不使用 ! 作为否定运算符。 "not" 拼写为 "not"。 【参考方案1】:

您希望您的if 支票是:

% if not loop.last %
    ,
% endif %

请注意,您也可以使用If Expression 缩短代码:

 ", " if not loop.last else "" 

【讨论】:

这太棒了,尤其是在 html 中循环结束时 仅供参考,您可能需要根据您的设置将其设为 if/else。更多信息。可以在这里找到:github.com/pallets/jinja/issues/710 或者是某些情况 "," if not forloop.last 我支持关于添加 else 的评论。这对我有用 "," if not loop.last else "" 在我的例子中是forloop而不是loop%而不是,就像这样:% if not forloop.last %,% endif %。其他解决方案无效【参考方案2】:

你也可以使用内置的“加入”过滤器(http://jinja.pocoo.org/docs/templates/#join 像这样:

 users|join(', ') 

【讨论】:

虽然这适用于创建 csv,但请参阅上面的示例,它不能与周围的锚一起使用。 这种方法也不适用于转义: [' ['a\'', 'b']|join("', '") '] 产生 [' a'', 'b'] 这应该是第一件事。如果它不能按预期工作,请尝试其他解决方案,但这绝对是最干净的。 这给出了一个尾随逗号,我该如何摆脱它? 您可能有一个尾随空元素。如果你有三个元素 a b c 你会在加入 X 时得到 aXbXc:ansible -i localhost, all -m debug -a "msg=\" [ 'a','b','c' ]|join('X') \""【参考方案3】:

并使用来自https://jinja.palletsprojects.com/templates/#joiner 的joiner

% set comma = joiner(",") %
% for user in userlist %
     comma() <a href="/profile/ user /"> user </a>
% endfor %  

它正是为此目的而制作的。通常,对于单个列表,连接或检查 forloop.last 就足够了,但对于多组事物,它很有用。

一个更复杂的例子说明你为什么要使用它。

% set pipe = joiner("|") %
% if categories %  pipe() 
    Categories:  categories|join(", ") 
% endif %
% if author %  pipe() 
    Author:  author() 
% endif %
% if can_edit %  pipe() 
    <a href="?action=edit">Edit</a>
% endif %

【讨论】:

这实际上对我来说效果很好,没有留下逗号。感谢这个!

以上是关于如何在 jinja python 模板中输出逗号分隔列表?的主要内容,如果未能解决你的问题,请参考以下文章

python 如何使用Markdown作为Jinja2模板中的过滤器,然后直接从模板中提取Markdown Meta属性。假设你

Ansible Jinja2 模板概述 --01

带有缓存加载器的 Jinja2 与 django 模板 - 性能比较如何?

GAE / Python / jinja2 / 如何在join语句中引用子目录

无法在带有气流的 jinja 模板中使用 python 变量

自动化运维工具-Ansible Jinja2模板