我正在使用沙盒CMS,因此除了Jinja版本之外,我无法运行任何pythonic代码。
我从数据库中提取我的列表,我根据字段=某个值来分割它们。
{# rows = command to pull from db #}
{% set row_one = rows|selectattr('resource','equalto','One') %}
{% set row_two = rows|selectattr('resource','equalto','Two') %}
{# Sets my empty array #}
{% set newobj = [] %}
从这里开始,第一行/第二行的控制台记录将只显示那些适用于各自资源类型的项目。
当我尝试将这两个填充到数组中然后迭代它以交替结果时,我的问题出现了。
以下是我的尝试:
{% for row in rows %}
{% newObj.update(row_one[loop.index0], row_two[loop.index0] %}
{% endfor %}
这似乎在newObj
未知标记' newobj'
我让它停止使用:
抛出错误{% for row in rows %}
{% set objs = newObj.update(marketingRows[loop.index0], salesRows[loop.index0], designRows[loop.index0]) %}
{% endfor %}
但事实证明,当控制台记录objs
时,这并没有返回任何内容。
{# example input #}
row_one = ['1', '2', '3', '4']
row_two = ['a', 'b', 'c', 'd']
{# desired output #}
objs = ['1', 'a', '2', 'b', '3', 'c', '4', 'd']
我完全失去了这里,感谢任何帮助!
答案 0 :(得分:0)
从个人经验来看,由于你无法运行任何python代码,因此没有 easy 方法在jinja中实现这一点。由于jinja不支持zip
,max
在v2.10之前无法使用,因此我们需要即兴创作。
首先,您需要获得任一列表的最长长度。
{%- set row_one = ['1', '2', '3', '4'] -%}
{%- set row_two = ['a', 'b', 'c', 'd'] -%}
{%- set rows_combined = (row_one, row_two) -%}
{%- set lengths = [] %}
{%- for row in rows_combined -%}{%- if lengths.append(row|length)-%}{%- endif -%}{%- endfor -%}
{%- set max_length = (lengths|sort)[-1] -%}
接下来,您需要执行嵌套循环。首先迭代最大长度范围,然后rows_combined
以获取row_one
和row_two
的正确索引。
{%- set rows = [] -%}
{# Loops through a range of max_length #}
{%- for r in range(max_length) -%}
{# Loops through the tuple containing row_one and row_two #}
{%- for a in rows_combined -%}
{# checks if a[r] exists if based on current index, if so appends it rows#}
{%- if a[r] -%}{%- if rows.append(a[r]) -%}{%- endif -%}{%- endif -%}
{%- endfor -%}
{%- endfor -%}
{{ rows }}
>>>['1', 'a', '2', 'b', '3', 'c', '4', 'd']
使用3个列表而不是2个
进行测试{%- set row_one = ['1', '2', '3', '4'] -%}
{%- set row_two = ['a', 'b', 'c', 'd'] -%}
{%- set row_three = ['w', 'x', 'y', 'z'] -%}
{%- set rows_combined = (row_one, row_two, row_three) -%}
{%- set lengths = [] %}
{%- for row in rows_combined -%}{%- if lengths.append(row|length)-%}{%- endif -%}{%- endfor -%}
{%- set max_length = (lengths|sort)[-1] -%}
{%- set rows = [] -%}
{%- for r in range(max_length) -%}
{%- for a in rows_combined -%}
{%- if a[r] -%}{%- if rows.append(a[r]) -%}{%- endif -%}{%- endif -%}
{%- endfor -%}
{%- endfor -%}
{{ rows }}
>>> ['1', 'a', 'w', '2', 'b', 'x', '3', 'c', 'y', '4', 'd', 'z']