Python3.4 Django1.9 Noob here ...:)
我正在尝试遍历Django字段但是没有得到想要的结果,这是图片:
模型字段“info”可以包含字符串,在某些情况下可以包含python列表。在这种情况下我的问题是它是一个列表,我必须遍历它......
e.g:
说“info”字段有这样的东西:['2016-02-23','2016-03-01']我尝试在Django1.9模板上循环它,如下所示:
{% for i in dates %} {{i}}<br /> {% endfor %}
我希望看到这样的事情:
2016-02-23
2016-03-01
相反,我得到了这个:
[
'
2
0
1
6
-
0
2
-
2
3
'
,
'
2
0
1
6
-
0
3
-
0
1
'
]
这让我觉得掌握数据的mySQL字段让我觉得这是一个python列表......我改变数据库字段格式的能力有限......任何帮助都会受到赞赏!
models.py
class Events(....
info = models.CharField(max_length=150, blank=True)
views.py
dates_list = []
obj_dates = Events.objects.filter(id=id)
for i in obj_dates:
dates_list.append(i.info)
context = {"dates": dates_list)
Django 1.9模板
{% for i in dates %} {{i}} {% endfor %}
答案 0 :(得分:0)
只看你的代码
obj_dates = Events.objects.filter(id=id)
只会给你一个条目(因为你按id过滤) - 你只返回一个只有一个对象的查询集。
使用时:
for i in obj_dates:
dates_list.append(i.info)
你附加一个字符串&#34; [&#39; 2016-02-23&#39;,&#39; 2016-03-01&#39;]&#34; 到dates_list。也就是说,dates_list只是一个包含单个字符串的列表 - 它似乎是一个包含列表的列表,但它是一个包含字符串的列表。
python字符串中的是可迭代的,因此模板一次迭代字符串中的一个字符,从而返回
[
'
2
...
<强>解决方案强>
一个。黑客的方式
dates_list.append(list(i.info))
将转换该字符串&#34; [&#39; 2016-02-23&#39;,&#39; 2016-03-01&#39;]&#34;到列表
B中。更多django-ish方法
问问自己,你能以更好的方式存储日期吗? 一种方法是使用dateField然后使用m2m,这样你就可以存储多个日期。
class Events(models.Model)
info = models.CharField(max_length=150, blank=True)
dates = models.ManyToManyField(Dates, related_name='events', blank=True)
class Dates(models.Model)
date = models.DateField(auto_now=False, auto_now_add=False)
答案 1 :(得分:0)
感谢luke_aus的帮助!
我也找到了一些在某些情况下可行的东西...... 如果您认为自己处于需要解压缩或循环存储在CharField中的Python列表的情况下,请尝试这个......在我的情况下它运行良好......
<强> Views.py 强>
import ast
date_list = []
for i in obj:
l = {
'dates': ast.literal_eval(i.info), # i.info is a CharField containing a python list
}
dates_list.append(l)
<强>模板强>
{% for d in dates %}
{{d}}<br>
{% endfor %}
2016-02-23
2016-03-01