Django - 用不同的签名覆盖 TemplateView.get 是一种不好的做法吗?
Django - Is overriding TemplateView.get with different signature a bad practice?
我写了一个 Django 应用程序,其中 JobView
继承自 TemplateView
。 get 方法需要一个附加参数 (job_id),它位于 URL 中。基本上,我的 urls.py
看起来像这样:
# urls.py
from django.conf import url
from .views import JobView
urlpatterns = [
url(r'^job/(?P<job_id>[0-9]+)$',
JobView.as_view())
views.py包含JobView的定义:
# views.py
from django.views.generic import TemplateView
from django.http import HttpResponse
class JobView(TemplateView):
def get(self, request, job_id):
# Some stuff
return HttpResponse("something")
使用 pylint 检查此代码时,出现此错误:[arguments-differ] Arguments number differs from overriden 'get' method
。
为了适应TemplateView.get
方法,JobView.get
的定义应该是:
class JobView(TemplateView):
def get(self, request):
# Some stuff
用其他签名覆盖是一种不好的做法吗?如果是,我应该如何实现这样的事情?
签名应该相同,但是如果在调用超级 class 方法时弹出它们,则可以添加自定义 args 和 kwargs。视图 (subclass) 的实际方法签名是 get(self, request, *args, **kwargs)。
我写了一个 Django 应用程序,其中 JobView
继承自 TemplateView
。 get 方法需要一个附加参数 (job_id),它位于 URL 中。基本上,我的 urls.py
看起来像这样:
# urls.py
from django.conf import url
from .views import JobView
urlpatterns = [
url(r'^job/(?P<job_id>[0-9]+)$',
JobView.as_view())
views.py包含JobView的定义:
# views.py
from django.views.generic import TemplateView
from django.http import HttpResponse
class JobView(TemplateView):
def get(self, request, job_id):
# Some stuff
return HttpResponse("something")
使用 pylint 检查此代码时,出现此错误:[arguments-differ] Arguments number differs from overriden 'get' method
。
为了适应TemplateView.get
方法,JobView.get
的定义应该是:
class JobView(TemplateView):
def get(self, request):
# Some stuff
用其他签名覆盖是一种不好的做法吗?如果是,我应该如何实现这样的事情?
签名应该相同,但是如果在调用超级 class 方法时弹出它们,则可以添加自定义 args 和 kwargs。视图 (subclass) 的实际方法签名是 get(self, request, *args, **kwargs)。