我正在使用Jinja2获得一些不寻常的行为并迭代一个我无法完全指责的数组。我正在将字典传入Jinja2,字典中的一个值是数组。一个简单的例子就可以了。
mydict = {
'testvar1': 'this is a test var 1',
'testvar2': 'this is a test var 2',
'testvar3': ['test','test','test','test','test'],
}
这是我的Jinja模板
{{ testvar1 }}
{{ testvar2 }}
{% for var in testvar3 %}
{{ var }}
{% endfor %}
现在这实际上有效,我得到以下输出
this is a testvar1
this is a testvar2
test
test
test
test
test
test
但是,我正在使用CSV导入实用程序生成字典。现在我知道这个工具将所有值都作为字符串导入,所以我用破折号分隔'数组字段',这样我可以稍后拆分它们。
input_file = csv.DictReader(open("./my_path/import.csv"))
for row in input_file:
for key, value in row.iteritems():
if '-' in value:
value = value.split('-')
当我打印手动创建的字典中的数组值和csv导入创建的字典时,它们看起来完全相同。
['test','test','test','test','test']
然而,当我使用csv import填充的dictonary生成配置时,我得到的输出完全不同。
testvar1
testvar2
t
e
s
t
t
e
s
t
等等......
现在它似乎正在迭代这些值,好像它是一个简单的字符串值,每次循环迭代一次打印一个字符。
但手动制作字典时效果非常好。
有什么想法吗?如果有一种更清洁的方法可以做到这一点,我全都听见了。
提前致谢。
答案 0 :(得分:0)
我的问题是我的数据库中有错误的JSON语法。
{
"tags" : "[my, wrong, array]"
}
最终被解释为python中的unicode对象,这解释了为什么迭代它迭代每个字符。 正确的语法是:
{
"tags": [
"tech",
"python",
"flask"
]
}