在django listview中显示类别标题

时间:2014-10-12 09:35:25

标签: 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'), 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 }}

上面的模板标签根本不会触发任何内容,我会在所选类别页面中显示类别标题(例如,如果选择了软件类别,我希望显示' ;软件'作为页面标题。

1 个答案:

答案 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。