【问题标题】:String concatenation in JinjaJinja 中的字符串连接
【发布时间】:2010-01-14 00:41:16
【问题描述】:

我只想遍历现有列表并从中创建一个逗号分隔的字符串。
像这样的东西:my_string = 'stuff, stuff, stuff, stuff'

我已经知道loop.last,我只需要知道如何使下面代码中的第三行工作。

{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff + ', '%}
{% endfor%}

【问题讨论】:

  • 好的,我发布的原始代码有效,我在实际代码中的 {{}} 中而不是 {%%} 我一直在搜索和搜索处理它的最佳方法和事情我可以这样做,而且那是在一天结束时到深夜,所以 {{}} 在我的挫败感中溜走了。谢谢你的回复

标签: string jinja2


【解决方案1】:

如果stuffs 是一个字符串列表,那么这样就可以了:

{{ stuffs|join(", ") }}

请参阅 join filter 文档以及 filters in general 文档。

附言

对读者更友好的方式

{{ my ~ ', ' ~ string }}

【讨论】:

【解决方案2】:

如果您知道所有值都是字符串,则可以使用+。 Jinja 还提供了~ 运算符,它将确保所有值都首先转换为字符串。

{% set my_string = my_string ~ stuff ~ ', '%}

【讨论】:

【解决方案3】:

我的不好,为了简​​化它,我走得太远了,实际上stuffs是各种信息的记录,我只是想要其中的id。

stuffs = [[123, first, last], [456, first, last]]

我希望my_sting 成为

my_sting = '123, 456'

我的原始代码应该是这样的:

{% set my_string = '' %}
{% for stuff in stuffs %}
{% set my_string = my_string + stuff.id + ', '%}
{% endfor%}

仔细想想,stuffs 可能是一本字典,但你明白了要点。

是的,我找到了join 过滤器,并且打算这样处理它:

 {% set my_string = [] %}
 {% for stuff in stuffs %}
 {% do my_string.append(stuff.id) %}
 {% endfor%}
 {%  my_string|join(', ') %}

但是如果不导入扩展来执行附加操作,则附加功能不起作用,并且阅读该文档让我很头疼。它没有明确说明从哪里导入它,甚至没有说明你将在哪里放置 import 语句,所以我认为找到一种 concat 方法将是两个弊端中较小的一个。

【讨论】:

【解决方案4】:

如果你不能只使用过滤器连接但需要对数组的条目进行一些操作:

{% for entry in array %}
User {{ entry.attribute1 }} has id {{ entry.attribute2 }}
{% if not loop.last %}, {% endif %}
{% endfor %}

【讨论】:

  • {% if not loop.last %}, {% endif %} -> 完美!!
【解决方案5】:

只是另一个黑客可以像这样。

我有需要连接的字符串数组。所以我将该数组添加到字典中,然后在 for 循环中使用它。

{% set dict1 = {'e':''} %}
{% for i in list1 %}
{% if dict1.update({'e':dict1.e+":"+i+"/"+i}) %} {% endif %}
{% endfor %}
{% set layer_string = dict1['e'] %}

【讨论】:

  • 这很棒,当代码是烧瓶应用程序模板的一部分时,可以避免额外的None
猜你喜欢
  • 2018-07-01
  • 1970-01-01
  • 2017-07-30
  • 2020-04-16
  • 1970-01-01
  • 2014-08-01
  • 2014-03-31
  • 2017-04-24
  • 1970-01-01
相关资源
最近更新 更多