我正在处理的项目有一些数据需要传递给每个 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/