我正在處理的項目有一些數據需要傳遞給每個視圖,所以我們有一個圍繞render_to_response
的包裝,稱爲master_rtr
。好。Django:自定義404處理程序返回404狀態代碼
現在,我需要我們的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
啊,是的,這就是我一直在尋找的。用代碼更新了問題。 – 2010-02-22 20:27:32
那麼它絕對看起來像你可以只是在上下文處理器(然後將其添加到TEMPLATE_CONTEXT_PROCESSORS設置)。 如果您擔心丟失使用RequestContext的簡單快捷方式,則可以使用django.views.generic.simple.direct_to_template – SmileyChris 2010-02-23 00:48:44