3
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 索引(请求):

    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)

有一些关于这样的错误的帖子,但不包括我的问题

4

2 回答 2

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)

于 2012-11-10T17:09:29.083 回答
1
 return render_to_response('index.html',{'categories':Category.objects.all(), 'posts':Blog.objects.filter(....)},
context_instance=template.RequestContext(request))
于 2012-11-10T19:16:54.653 回答