zoukankan      html  css  js  c++  java
  • 使用django开发博客过程记录4——Category分类视图

    在写点击博客的所属分类,显示所有该分类的文章时真是让我想了好一会,为什么呢?因为我使用的是cbv模式开发的而不是简单的视图处理逻辑的,所以,有些操作会被包装好了,你并不知道它的细节,那么我们今天要实现的这个功能需要得到GET请求的category参数,那就麻烦了。

    一开始,我以为需要重写它包装好的get()函数,结果弄了好一会后发现根本不好用。

    后来,实在是没办法了,参照网上的说法,看了一看django源码,哇,效果果然显著,原来我们继承的ListView和MultipleObjectMixin类都继承自Context_Mixin类下面是它的代码:

    class ContextMixin(object):
        """
        A default context mixin that passes the keyword arguments received by
        get_context_data as the template context.
        """
    
        def get_context_data(self, **kwargs):
            if 'view' not in kwargs:
                kwargs['view'] = self
            return kwargs

    那么就好了,我们在get_queryset(self)中只需要获得kwargs['category']就可以了(看源码果然有好处啊)下面是代码:

    class CategoryView(ListView, MultipleObjectMixin):
        template_name = 'apps/full-width.html'
        context_object_name = 'article_list'
        paginate_by = 10
    
        def get_queryset(self):
            cat_query = Category.objects.get(name=self.kwargs['category'])
            article_list = cat_query.article_set.filter(status='p')
            return article_list

    那个 MultipleObjectMixin是以为分页要用到需要继承的类。

    在解决这个问题时还遇到另一个问题:

    TypeError at /archive/category/Python/

    object of type 'NoneType' has no len()

     

    这是个什么问题呢?我们继承了MultipleObjectMixin类,它是负责处理分页的,但是我发现我的代码中没有return get_queryset()获得结果,所以该类无法获取读取信息的长度,所以会报这个错误。

    这个问题让我意识到,学习不是去学习解决问题,而是去学习分析问题的过程,学习debug这才是最重要的,因为我们不可能只学习一门语言,一类只是,要把学到的只是形成体系,这样才是最应该的。

     
  • 相关阅读:
    修改windows系统cookie、favorites、desktop等的位置到非系统盘
    第三章 多维随机变量及其分布4
    谈谈Ironpython的应用
    提问的智慧
    第三章 多维随机变量及其分布2
    用C#做 UG NX 二次开发 / NX Secondary Dev. with C#
    第六章 样本与抽样分布
    ufun视频教程(合) / Movie of UFUN
    第四章 随机变量的数字特征2
    第一章 概率论的基本概论
  • 原文地址:https://www.cnblogs.com/selfimprovement/p/5961206.html
Copyright © 2011-2022 走看看