2014-10-12 101 views
1

希望在每个博客分类索引页面中使用基于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 }} 

上面的模板代码未触发任何可言,我该怎么考虑所选类别页面(例如显示类别标题,如果选择“软件”类别,我希望显示“软件”作为页面标题。

回答

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视图中工作,这对于一些原因是共享同样的模板,因为这个观点没有slu k克瓦格。

+0

是的,这确实打印出类别 - 所有类别的顺序。就此而言,事情很简单,但事情是当我点击(例如'照片'类别)时,我希望将'照片'显示为类别标题 -

照片

。我应该看看什么,猜猜这是对views.py的处理,我错过了一些小东西。 – sunjoo 2014-10-12 11:58:01

+0

每个类别中的所有帖子都取得了良好的...只是我希望在post_list.html模板中的{{category.title}}中的每个相应类别的博客文章中打印出“category.title” 。类别有'title,slug,summary,is_public'字段。仍然有效,我或许应该再次看待所有? – sunjoo 2014-10-12 12:56:02