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

标签 django http-status-code-404

我正在处理的项目有一些数据需要传递给每个 View ,所以我们有一个围绕 render_to_response 的包装器,称为 master_rtr。好的。

现在,我还需要我们的 404 页面来运行它。每the instructions ,我创建了一个调用 master_rtr 的自定义 404 处理程序(巧妙地称为 custom_404)。一切看起来都不错,但我们的测试失败了,因为我们收到了 200 OK。

因此,我试图弄清楚如何返回 404 状态代码。那里seems to be一个 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

最佳答案

简单的方法:

def custom_404(request):
    response = master_rtr(...)
    response.status_code = 404
    return response

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

关于Django:返回 404 状态代码的自定义 404 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308212/

相关文章:

django - 使用 Django 搜索 PostgreSQL 并传递 null 或空字符串值

codeigniter - `enable_query_strings` 工作不正常

azure - 404/signalr/negotiate 在 Azure 中部署的应用程序

php - Apache:在此服务器上找不到请求的 URL。 Apache

html - 如何在 Laravel 上设置不同的 404 错误页面?

python - 如何在 Django 中将 html 页面转换为 pdf

python - 从序列化程序创建一个实例而不将其持久化到数据库

python - Django 2.1.4 注册表单+登录页面

database - 现场冲突的django related_name