Django TypeError: get() 得到了一个意外的关键字参数'quiz_name'



我正试图从flutter webview访问一个url,但是,我收到了以下错误。当我尝试直接访问时,我没有看到任何错误。

File "/home/quiz/views.py", line 629, in dispatch
return super(QuizTakeAutoAuth, self).dispatch(request, *args, **kwargs)
TypeError: get() got an unexpected keyword argument 'quiz_name'

views.py

class QuizTakeAutoAuth(APIView):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)

def get(self, request, format=None):
content = {
'foo': 'bar'
}

return Response(content)

def dispatch(self, request, *args, **kwargs):
self.quiz = get_object_or_404(Quiz, url=self.kwargs['quiz_name'])
if self.quiz.draft and not request.user.has_perm('quiz.change_quiz'):
raise PermissionDenied
if self.sitting is False:
print("sitting false")
if self.logged_in_user:
return render(request, self.single_complete_template_name)
else:                    
redirecturl = "/login/?next=/quiz/"+self.kwargs['quiz_name']+"/startquiz/"
return redirect(redirecturl)   
return super(QuizTakeAutoAuth, self).dispatch(request, *args, **kwargs)

urls.py

url(r'^(?P<quiz_name>[w-]+)/startquiz/$',view=QuizTakeAutoAuth.as_view(), name='quiz_question_auth'),

我在这里错过了什么?我在其他地方使用相同的视图,没有任何knox Tokenauthentication,并按预期工作。

由于您在url中使用paramaterquiz_name,因此它将被传递到相应的视图。get方法的当前签名不接受任何其他参数。

您可以通过将方法签名更改为:来解决此问题


def get(self, request, *args, **kwargs):
quiz_name = kwargs.get('quiz_name')
...

最新更新