在django列表视图中显示类别标题
希望使用基于django类的listview在每个博客类别索引页面中显示类别标题。我要做的是在每个选定的类别页面中显示每个category.title。但什么也没有显示。下面是模型、视图和模板,它一定是我缺少的一些小东西在django列表视图中显示类别标题,django,class,listview,categories,title,Django,Class,Listview,Categories,Title,希望使用基于django类的listview在每个博客类别索引页面中显示类别标题。我要做的是在每个选定的类别页面中显示每个category.title。但什么也没有显示。下面是模型、视图和模板,它一定是我缺少的一些小东西 # models.py class Category(models.Model): title = models.CharField(_('name'), max_length=100,) slug = models.SlugField(_('url'),
# 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\u view
的变量,因此尝试打印它不会输出任何内容也就不足为奇了
您所拥有的是一个名为category
的变量,它(令人困惑地)实际上是一个类别列表。您必须遍历该列表并打印每个类别的标题:
{% for cat in category %}
{{ cat.title }}
{% endfor %}
(尽管您可能应该将变量重命名为“categories”)
编辑再次强调,不是因为你遗漏了一些小东西,而是因为你没有做你需要做的事情来获得你想要的结果。如果你想打印出一个特定的类别,那么你需要从数据库中获取该类别,而你根本没有这样做
您可以将类别查询替换为更具体的查询,并使用get
而不是filter
:
context['category'] = Category.objects.filter(slug=self.kwargs['slug'], is_public=True)
但是请注意,这在PostList视图中不起作用,因为出于某种原因,它共享同一个模板,因为该视图没有slug kwarg。是的,它会按顺序打印类别-所有类别。从这个角度来说,事情很简单,但当我单击(例如,“照片”类别)时,我希望将“照片”显示为类别标题-照片。我应该研究什么,我想这与views.py有关,我缺少了一些小东西。每个类别中的所有帖子都很好…只是我希望在每个博客帖子类别中打印“category.title”,如{{category.title}在post_list.html模板中。类别具有“title、slug、summary、is_public”字段。是否仍然有效?我是否应该再次查看所有视图?