错误说:
get()只需要2个参数(给定3个)
我将DetailView子类化为:
class MovieDetail(DetailView):
template_name = 'examples/generic_movie_detail.html'
template_object_name = 'movie'
def get_queryset(self):
movie = get_object_or_404(Movies, actors__name__contains = self.args[0])
return movie
并使用url作为:
(r'^movie/detail/(\w+)', MovieDetail.as_view())
现在我想通过任何特定的演员说('Tom')来检索电影,然后我将Tom通过url传递为“/ movie / detail / tom”。我会在我的模板中解决它。
追溯:
File "C:\Python26\lib\site-packages\django\core\handlers\base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "C:\Python26\lib\site-packages\django\views\generic\base.py" in view
47. return self.dispatch(request, *args, **kwargs)
File "C:\Python26\lib\site-packages\django\views\generic\base.py" in dispatch
68. return handler(request, *args, **kwargs)
异常类型:/ examples / movie / detail / aamir中的TypeError 异常值:get()只需要2个参数(给定3个)
答案 0 :(得分:1)
当您不接受参数时,您正在通过您的网址捕获组(BaseDetailView.get
)传递(\w+)
个参数。
class BaseDetailView(SingleObjectMixin, View):
def get(self, request, **kwargs): #<-- only keyword args
传递关键字参数或覆盖get
方法以接受*args
或您的特定参数。
答案 1 :(得分:0)
如果您是DetailView
的子类,请尝试覆盖get_object
而不是get_queryset
。
编辑:Yuji Tomita的回答似乎是您问题的正确答案,您可能应该使用self.kwargs['name']
和(r'^movie/detail/(?P<name>\'+)/$', MovieDetail.as_view())
请记住,对于详细视图,您可能希望只收到一个url的结果,并且您应该使用唯一的标识字段和“精确”过滤器而不是使用外键查找并使用“包含” ”