如何在 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属性。假设你
带有缓存加载器的 Jinja2 与 django 模板 - 性能比较如何?
GAE / Python / jinja2 / 如何在join语句中引用子目录