覆盖ListView属性

时间:2018-05-02 23:58:31

标签: python django

当覆盖类视图的属性时,它附带:

class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

我认为它应该是:

class IndexView(generic.ListView):
    def __init__(self, *args, **kwargs):
        super().__init__(self, *args, **kwargs):
        template_name = 'polls/index.html'
        context_object_name = 'latest_question_list'

Django如何通过直接赋值变量来实现它?

2 个答案:

答案 0 :(得分:1)

您展示的第一个案例是设置变量的示例。在第二种情况下,您实际上是在定义局部变量,但我假设您打算分配 instance 变量,如下所示:

def __init__(self, *args, **kwargs):
    super().__init__(self, *args, **kwargs):
    self.template_name = 'polls/index.html'
    self.context_object_name = 'latest_question_list'

退房 以及对this stack overflow postthis other one的答案,以便对差异进行一些讨论。

答案 1 :(得分:1)

我没看过Django GenericView的源代码, 您指出的变量是我们可以调用class Variables的变量,这些变量是类ListView的变量。基本上,它们是所有实例共享的类变量 而在__init__内,他们被称为instance variable 每个实例都是唯一的

一个小例子(不够好):

class MyView:
    template_name = 'default_name.html' # class variable shared by all instances

    def __init__(self,name):
        self.name = name  # instance variable unique to each instance

    def get_template_name(self):
        return self.name