Jinja2阵列迭代问题

时间:2014-05-15 15:49:55

标签: python csv jinja2

我正在使用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

等等......

现在它似乎正在迭代这些值,好像它是一个简单的字符串值,每次循环迭代一次打印一个字符。

但手动制作字典时效果非常好。

有什么想法吗?如果有一种更清洁的方法可以做到这一点,我全都听见了。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我的问题是我的数据库中有错误的JSON语法。

{
    "tags" : "[my, wrong, array]"
}

最终被解释为python中的unicode对象,这解释了为什么迭代它迭代每个字符。 正确的语法是:

{
    "tags": [
        "tech",
        "python",
        "flask"
    ]
}