2017-04-12 11 views
0

我用TemplateView繼承了一個JobView的Django應用程序。 get方法需要一個額外的參數(job_id),它在URL中。基本上,我urls.py看起來是這樣的:Django - 重寫TemplateView.get與不同的簽名是一種不好的做法?

# 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包含工作視圖的定義:

# 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 

與另一簽名一種不好的做法重寫?如果是的話,我該如何實施這樣的事情?

+1

這並不壞,但如果您重寫'get'直接返回響應,則在重寫TemplateView而不是基本View時,似乎沒有任何意義。 –

+0

在這一點上你是對的,但一些代碼丟失,使'TemplateView'有意義。然而'base.View'沒有'get()'方法,解決了這個問題。如果我的代碼是不好的做法,這可能是一個很好的解決方案。謝謝! – Dunatotatos

回答

1

簽名應該是相同的,但如果您在調用超類方法時彈出它們,則可以添加自定義參數和kwargs。 View(子類)的實際方法簽名是get(self,request,* args,** kwargs)。

相關問題