在django列表视图中显示类别标题

在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'),

希望使用基于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 }}

上面的模板标签根本不会触发任何,我应该如何查看以在所选类别页面中显示类别标题(例如,如果选择了“软件”类别,我希望将“软件”显示为页面标题。

这里有一些错误,但最明显的是,您的上下文中没有名为
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”字段。是否仍然有效?我是否应该再次查看所有视图?