我正在使用 Django 2.0
并且一直在尝试将用户重定向到 get_context_data
的其他视图
我的网址模式是
mainapp.urls
urlpatterns = [
path('learn/', include('learn.urls', namespace='learn')),
path('admin/', admin.site.urls),
]
app.url
app_name = 'learn'
urlpatterns = [
path('success/<course_learn_id>/<session>', LearnSuccess.as_view(), name='success'),
]
和 LearnSuccess
查看
class LearnQuestion(FormView):
form_class = SessionForm
template_name = 'learn/learn_question.html'
def get_context_data(self, **kwargs):
context = super(LearnQuestion, self).get_context_data(**kwargs)
course_learn = CourseLearn.objects.get(pk=self.kwargs['course_learn_id'])
session = self.request.GET['session']
question, question_type, options, complete = CourseLearn.objects.get_next_question(course_learn, session)
if complete:
return redirect('learn:success', course_learn_id=course_learn.pk, session=session)
context['complete'] = complete
context['question'] = question
context['question_type'] = context_type
context['options'] = options
context['session'] = session
return context
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(self.__class__, self).dispatch(request, *args, **kwargs)
我正在使用Ajax渲染此视图,并希望在 complete
为 True
时重定向用户
但这是错误的
TypeError: context must be a dict rather than HttpResponseRedirect.
我甚至尝试了 return reverse()
但它也给出了错误 .
试
return redirect('learn:success', kwargs={'course_learn_id':course_learn.pk, 'session':session})
给出错误
django.urls.exceptions.NoReverseMatch: Reverse for 'success' with keyword arguments
'{'kwargs': {'course_learn_id': UUID('374ccfcd-37b5-40d3-8673-01ca111f42bc'), 'session': '1524972935'}}' not found.
1 pattern(s) tried: ['learn\\/success\\/(?P<course_learn_id>[^/]+)\\/(?P<session>[^/]+)$']
2 回答
get_context_data()
应该是为了在渲染之前向模板添加其他上下文 . 用于执行其他视图级逻辑是 not .您正尝试从那里返回重定向响应对象,该对象无效 -
get_context_data()
的返回值只能是字典 .您当前尝试在此处执行的逻辑应该在您的视图的
get()
方法中,例如:使用
render_to_response
解决了这个问题 . 对于那些可能需要它的人,在类中添加一个函数并从
get_context_data()
发送上下文数据