Jinja2获取语法错误Python生成器

2024-03-28 19:38:17 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的代码。我得到了一个语法错误,但在Python中没有这样的问题

{% for stud in  [dict(item.split("=") for item in item.split(",")) for item in item.split(";")] %}
  print {"hi"}
{% endfor %}

例外情况:

Syntax error in jinja2 template: expected token ',', got 'for'

样本输入:

studId=ValueA,studName=valueB;studId=ValueC,studName=ValueD

Python中使用的示例代码:

item = "studId=ValueA,studName=valueB;studId=ValueC,studName=ValueD"


for stud in [dict(item.split("=") for item in item.split(",")) for item in item.split(";")]:
  print(stud['studName'])

样本输出:

valueB
ValueD

Tags: 代码inforitemdictsplit样本print
1条回答
网友
1楼 · 发布于 2024-03-28 19:38:17

至少从我注意到的情况来看,jinja似乎没有

我测试过的一个变通方法是pass in a function,它对Jinja2执行列表理解,然后可以使用它来呈现模板:

import jinja2


item = "studId=ValueA,studName=valueB;studId=ValueC,studName=ValueD"


def get_values(values):
    return [dict(v.split("=") for v in v.split(",")) for v in values.split(";")]


ts = """\
{% for value in get_values(values) -%}
  {{ value.studName }}
{% endfor %}\
"""

fields = {'get_values': get_values, 'values': item}

rendered = jinja2.Template(ts).render(**fields)

输出:

>>> rendered
'valueB\nValueD\n'

相关问题 更多 >