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模板