2011-09-20 42 views
-2

你会如何将其转换为一个对象,你可以通过将字符串转换“名单”的一个对象

[{u'pk': u'1', u'quantity': u'2', u'name': u'3mm aliminum sheet', u'size': u'300x322'},{u'pk': u'2', u'quantity': u'1', u'name': u'2mm aliminum sheet', u'size': u'300x322'}] 

该数据是在CharField()在我的Django模型保存为上述循环。现在我需要在模板中迭代它。

+0

你应该澄清你的问题,你的列表已经是你可以遍历的对象。 – tiho

回答

0

更新我更新我的答案。但你应该清楚地写下你的问题。在你的问题,你甚至不会尝试将其显示为一个strings。在第一次看它看起来像一个list

您可以使用http://docs.python.org/dev/library/ast.html蟒蛇ast模块。

In [12]: import ast 

In [13]: s = "[{u'pk': u'1', u'quantity': u'2', u'name': u'3mm aliminum sheet', u'size': u'300x322'},{u'pk': u'2', u'quantity': u'1', u'name': u'2mm aliminum sheet', u'size': u'300x322'}]" 

In [14]: result = ast.literal_eval(s) 

In [15]: result 
Out[15]: 
[{u'name': u'3mm aliminum sheet', 
    u'pk': u'1', 
    u'quantity': u'2', 
    u'size': u'300x322'}, 
{u'name': u'2mm aliminum sheet', 
    u'pk': u'2', 
    u'quantity': u'1', 
    u'size': u'300x322'}] 

In [16]: result[0].get('name') 
Out[16]: u'3mm aliminum sheet' 

现在您可以将此新结果值发送到模板。

{% for r in result.0 %} 
     {{ r.name }} 
    {% endif %} 
+0

我不能这样做。它的字符串 – Harry

+0

@哈利你在哪里提到你这个问题? – Tauquir

1
s = "[{u'pk': u'1', u'quantity': u'2', u'name': u'3mm aliminum sheet', u'size': u'300x322'},{u'pk': u'2', u'quantity': u'1', u'name': u'2mm aliminum sheet', u'size': u'300x322'}]" 
d = eval(s) 
print type(d) 

这不是持久对象的好方法。尝试使用模型类保存它们。

+0

它的工作原理是这样的 – Harry

2

不要那样做。使用JSONField - 示例实现见here - 和存储内容是有效的JSON,而不是一个字符串化的字典。