希望使用基于django类的listview在每个博客类别索引页面中显示类别标题。我想要做的是在每个选定的类别页面中显示每个category.title。但没有显示任何内容。下面是模型,视图,模板,它必须是我想念的小东西。
# models.py
class Category(models.Model):
title = models.CharField(_('name'), max_length=100,)
slug = models.SlugField(_('url'), max_length=250, unique=True)
summary = models.TextField(_('summary'), max_length=255)
class Post(models.Model):
category = models.ForeignKey(Category))
title = models.CharField(_('title'), max_length=255)
slug = models.SlugField(_('url'), max_length=250, unique=True)
content= models.TextField(_('summary'), null=True)
# view.py
class PostCategoryMixin(object):
def get_context_data(self, **kwargs):
context = super(PostCategoryMixin, self).get_context_data(**kwargs)
context['category'] = Category.objects.filter(is_public=True)
return context
class PostList(PostCategoryMixin, ListView):
model = Post
queryset = Post.objects.filter(is_public=True)
template_name = 'post/post_list.html'
class PostCategoryView(BlogCategoryMixin, ListView):
template_name = 'post/post_list.html'
model = Post
def get_queryset(self):
return Post.objects.filter(category__slug=self.kwargs.get('slug')).filter(is_public=True)
# post_list.html
{{ category_title }}
上面的模板标签根本不会触发任何内容,我会在所选类别页面中显示类别标题(例如,如果选择了软件类别,我希望显示' ;软件'作为页面标题。
答案 0 :(得分:0)
这里有一些问题,但最明显的是你在上下文中没有一个名为category_view
的变量,因此尝试打印输出并不奇怪什么都没有。
你所拥有的是一个名为category
的变量,它(令人困惑)实际上是一个类别列表。您必须遍历该列表并打印每个列表的标题:
{% for cat in category %}
{{ cat.title }}
{% endfor %}
(尽管您应该将变量重命名为'类别')。
修改再一次,并不是因为你错过了一些小事,而是因为你没有做你需要做的事情。得到你想要的结果。如果你想打印出一个特定的类别,那么你需要在某个地方从数据库中获取该类别,而你根本就不这样做。
您可以使用更具体的类别替换您的类别查询,并使用get
代替filter
:
context['category'] = Category.objects.filter(slug=self.kwargs['slug'], is_public=True)
但请注意,这不会在PostList视图中工作,由于某种原因,该视图共享相同的模板,因为该视图没有slug kwarg。