1

我的观点是这样的:

class PageView(DetailView):
    queryset = Page.objects.all()
    template_name = 'page.html'
    def get_context_data(self, **kwargs):
        context = super(PageView, self).get_context_data(**kwargs)
        context['category'] = Category.objects.all()
        context['categoryitem'] = CategoryItem.objects.all()
        return context

当在模板中我尝试执行给定的上下文变量时,{{ category }}它会打印出[<Category: Something not so interesting>]又名模型名称+它的标题,我认为标题被打印出来是因为我已经__unicode__(self): return self.title在 model.py 中设置了,但我无法从给定的对象。category.id是空白的,其他一切也是如此。我怎样才能访问这些?

4

3 回答 3

2

你的代码是:

context['category'] = Category.objects.all()

所以应该是:

context['categories'] = Category.objects.all()

在您的模板中:

{% for category in categories %}
  {{ category.name }}
{% endfor %}

您在测试中得到的输出是有意义的:

[<Category: Something not so interesting>]

它是一个只有一个条目的数组,该条目是 Category 类的一个对象,它的字符串表示形式是“Something not ...”

于 2013-10-16T05:40:07.390 回答
0

您需要遍历该类别,因为它是查询集。例如在你的模板中,你可以做

<ul>
{% for c in category %}
  <li> {{ c }} </li>
{% endfor %}
</ul>
于 2013-10-16T05:41:22.787 回答
0

category在模板中是查询集(对象列表)而不是单个对象。您需要对其进行迭代

{%for c in category %}
    {{c.id}} : {{ c.other_attribute }}
{%endfor%}
于 2013-10-16T05:41:24.863 回答