Django:返回404状态代码的自定义404处理程序

Xio*_*iov 2 django http-status-code-404

我正在处理的项目有一些需要传递给每个视图的数据,所以我们有一个render_to_response被调用的包装器master_rtr.好.

现在,我需要404页面来完成这个.根据说明,我创建了一个custom_404调用master_rtr 的自定义404处理程序(巧妙地调用).一切看起来都不错,但我们的测试都失败了,因为我们收到了200 OK.

所以,我试图弄清楚如何返回404状态代码.这里似乎是一个HttpResponseNotFound类还挺我想要什么,但我不太清楚如何构建所有的废话,而不是使用render_to_response.或者更确切地说,我可能想出来,但似乎他们必须是一个更容易的方式; 在那儿?

代码的适当部分:


 def master_rtr(request, template, data = {}):
  if request.user.is_authenticated():
   # Since we're only grabbing the enrollments to get at the courses, 
   # doing select_related() will save us from having to hit database for
   # every course the user is enrolled in
   data['courses'] = \
    [e.course for e in \
     Enrollment.objects.select_related().filter(user=request.user) \
     if e.view]
  else:
   if "anonCourses" in request.session:
    data['courses'] = request.session['anonCourses']
   else:
    data['courses'] = []

  data['THEME'] = settings.THEME

  return render_to_response(template, data, context_instance=RequestContext(request))

 def custom_404(request):
  response = master_rtr(request, '404.html')
  response.status_code = 404
  return response
Run Code Online (Sandbox Code Playgroud)

Smi*_*ris 10

简单的方法:

def custom_404(request):
    response = master_rtr(...)
    response.status_code = 404
    return response
Run Code Online (Sandbox Code Playgroud)

但我不得不问:为什么你不只是使用上下文处理器和RequestContext将数据传递给视图?