将字符串“list”转换为对象

时间:2011-09-20 09:15:38

标签: python django

如何将此转换为可以迭代的对象

[{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'}]

此数据保存在我的Django模型中的CharField()中。现在我需要在模板中迭代它。

3 个答案:

答案 0 :(得分:2)

不要那样做。使用JSONField - 有关示例实现,请参阅here - 并将内容存储为有效的JSON,而不是字符串化的字典。

答案 1 :(得分: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)

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

答案 2 :(得分:0)

更新我正在更新我的回答。但你应该清楚地写下你的问题。在您的问题中,您甚至不会尝试将其显示为strings。首先看它看起来像list

您可以使用http://docs.python.org/dev/library/ast.html python 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 %}