View中setup()函数:
def setup(self, request, *args, **kwargs):
"""Initialize attributes shared by all view methods."""
self.request = request
self.args = args
self.kwargs = kwargs
view视图:
from django.views.generic import View
class IndexView(View):
def get(self, request, *args, **kwargs):
return render(self.request, 'index.html')
如果get()函数没有接收request就会报出如下错误:
TypeError: get() takes 1 positional argument but 2 were given~
既然View.setup函数已经将request对象赋值给self.request,get()函数所接收的request和self.request相同,
为什么我还需要在IndexView.get函数中重新接收一遍呢?
为了能够回答你的问题,特地去GitHub看了源码: https://github.com/django/django/blob/stable/1.3.x/django/views/generic/base.py
时间序列:
base.py
即class View
.View.setup()
查看代码:Fixed #29750 -- Added View.setup() hook for class-based views.
具体原因可查看:https://github.com/django/django/pull/10427
看到这里,应该能知道原因了吧。