【问题标题】:How to output a comma delimited list in jinja python template?如何在 jinja python 模板中输出逗号分隔列表?
【发布时间】: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"。

标签: python jinja2


【解决方案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/#joinerjoiner

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

【讨论】:

  • 这实际上对我来说效果很好,没有留下逗号。感谢这个!
猜你喜欢
  • 2014-08-01
  • 2021-12-29
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 2012-08-22
  • 2016-09-27
相关资源
最近更新 更多