Django TypeError: get() got an unexpected keyword argument 'quiz_name'
Django TypeError: get() got an unexpected keyword argument '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
中使用了 paramater
quiz_name
,它被传递到您相应的视图。您的 get
方法的当前签名不接受任何附加参数。
您可以通过将方法签名更改为:
来解决此问题
def get(self, request, *args, **kwargs):
quiz_name = kwargs.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
中使用了 paramater
quiz_name
,它被传递到您相应的视图。您的 get
方法的当前签名不接受任何附加参数。
您可以通过将方法签名更改为:
来解决此问题
def get(self, request, *args, **kwargs):
quiz_name = kwargs.get('quiz_name')
...