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

Django:返回404状态代码的自定义404处理程序,django,http-status-code-404,Django,Http Status Code 404,我正在处理的项目中有一些数据需要传递到每个视图,因此我们在render\u to\u response周围有一个包装器,名为master\u rtr。嗯 现在,我需要我们的404页来运行这个。根据,我创建了一个自定义404处理程序(巧妙地称为custom\u 404),它调用master\u rtr。一切看起来都很好,但我们的测试失败了,因为我们收到的是200 OK 所以,我想知道如何返回404状态码。有一个HttpResponseNotFound类正是我想要的,但我不太确定如何构造所有这些废话

我正在处理的项目中有一些数据需要传递到每个视图,因此我们在
render\u to\u response
周围有一个包装器,名为
master\u rtr
。嗯

现在,我需要我们的404页来运行这个。根据,我创建了一个自定义404处理程序(巧妙地称为
custom\u 404
),它调用master\u rtr。一切看起来都很好,但我们的测试失败了,因为我们收到的是200 OK

所以,我想知道如何返回404状态码。有一个HttpResponseNotFound类正是我想要的,但我不太确定如何构造所有这些废话,而不是使用
render\u to\u 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将数据传递到视图?

刚刚设置。

到应用程序的视图中。py添加:

# Imports
from django.shortcuts import render
from django.http import HttpResponse
from django.template import Context, loader


##
# Handle 404 Errors
# @param request WSGIRequest list with all HTTP Request
def error404(request):

    # 1. Load models for this view
    #from idgsupply.models import My404Method

    # 2. Generate Content for this view
    template = loader.get_template('404.htm')
    context = Context({
        'message': 'All: %s' % request,
        })

    # 3. Return Template for this view + Data
    return HttpResponse(content=template.render(context), content_type='text/html; charset=utf-8', status=404)
秘密在最后一行:status=404


希望有帮助

啊,是的,这就是我要找的。用代码更新了问题。看起来你完全可以在上下文处理器中完成这项工作(然后将其添加到模板上下文处理器设置中)。如果您担心丢失使用RequestContext的更简单快捷方式,您可以使用django.views.generic.simple.direct\u to\u模板