在django listview中显示分类标题
问题描述:
希望在每个博客分类索引页面中使用基于django类的listview显示分类标题。我想要做的是在每个选定的类别页面中显示每个category.title。但没有显示。下面是模型,视图,模板,它必须是我错过的小东西。在django listview中显示分类标题
# 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 }}
上面的模板代码未触发任何可言,我该怎么考虑所选类别页面(例如显示类别标题,如果选择“软件”类别,我希望显示“软件”作为页面标题。
答
有几件事错在这里,但最明显的是,你没有一个叫您的上下文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视图中工作,这对于一些原因是共享同样的模板,因为这个观点没有slu k克瓦格。
是的,这确实打印出类别 - 所有类别的顺序。就此而言,事情很简单,但事情是当我点击(例如'照片'类别)时,我希望将'照片'显示为类别标题 -
照片
。我应该看看什么,猜猜这是对views.py的处理,我错过了一些小东西。 – sunjoo 2014-10-12 11:58:01每个类别中的所有帖子都取得了良好的...只是我希望在post_list.html模板中的{{category.title}}中的每个相应类别的博客文章中打印出“category.title” 。类别有'title,slug,summary,is_public'字段。仍然有效,我或许应该再次看待所有? – sunjoo 2014-10-12 12:56:02