67 <h2>Latest Posts</h2>
68
69 <ul>
70 {% for post in posts %}
71 <li><a href="{{ post.get_absolute_url }}">{{post.title}}</a></li>
72 {% endfor %}
73 </ul>
这是我的基本模板,当我点击帖子时,在第70行收到错误:
TypeError at /blog/posts/indiana-was-dogs-name/
'Blog' object is not iterable
我的博客模型:
class Blog(models.Model):
title = models.CharField(max_length=100, unique=True)
slug = models.SlugField(max_length=100, unique=True)
body = models.TextField()
posted = models.DateField(db_index=True, auto_now_add=True)
category = models.ManyToManyField(Category)
def __unicode__(self):
return self.title
def get_absolute_url(self):
return "/blog/posts/%s/" % self.slug
我的索引视图:
def index(请求):
variables = RequestContext(request, {
'categories': Category.objects.all(),
'posts': Blog.objects.filter(posted__lte=datetime.now()).order_by('-posted', 'title')
})
return render_to_response('index.html',variables)
有一些关于此类错误的帖子,但不包括我的问题
答案 0 :(得分:1)
正如它所说,传递给模板的blogs
变量不可迭代。
您只能遍历列表和其他迭代,在您的情况下,blogs
是Blog
实例,其中应该是QuerySet
。你可以写一下,例如
blogs = Blog.objects.all()
return render_to_response(..., {'blogs':blogs,...} ...}
修改强>
如果您使用Django文档中给出的确切语法,我会感觉更安全。也许语法的差异是罪魁祸首,我真的没有看到。
render_to_response(template_name[, dictionary][, context_instance][, mimetype])
将字典设置为{'categories': Category.objects.all(), 'posts': Blog.objects.filter(posted__lte=datetime.now()).order_by('-posted', 'title')}
和context_instance=RequestContext(request)
答案 1 :(得分:1)
return render_to_response('index.html',{'categories':Category.objects.all(), 'posts':Blog.objects.filter(....)},
context_instance=template.RequestContext(request))