我正在閱讀Django教程,並在第5部分:測試。我遇到了使用DetailView和ListView「快捷方式」視圖來分解代碼的問題(如本教程所建議的),但是當顯示404頁面時,將返回200狀態代碼。難道我做錯了什麼?教程中說狀態碼應該是404.Django 404頁面返回200狀態代碼
謝謝!
我正在閱讀Django教程,並在第5部分:測試。我遇到了使用DetailView和ListView「快捷方式」視圖來分解代碼的問題(如本教程所建議的),但是當顯示404頁面時,將返回200狀態代碼。難道我做錯了什麼?教程中說狀態碼應該是404.Django 404頁面返回200狀態代碼
謝謝!
您可以
return HttpResponseNotFound(render_to_string('404.html'))
代替。
您需要定義Http標題以具有404狀態。
return HttpResponse(content=template.render(context), content_type='text/html; charset=utf-8', status=404)
重要的是要告知搜索引擎當前頁面是404垃圾郵件發送者有時會造成大量的URL可能看起來會導致你的某個地方,但後來成爲你的另一個內容。他們經常會讓很多不同的地址爲您提供幾乎完全相同的內容。而且因爲它不是用戶友好的,所以大多數SEO指南都會對此進行懲罰。因此,如果您有許多地址顯示相同的僞404內容,那麼從搜索網站抓取的系統看起來不太好。因此,您要確保您用作自定義404的頁面具有404狀態。
如果你試圖讓一個自定義的404頁面,在這裏它是一個很好的路要走:
到應用程序的urls.py地址:
# Imports
from django.conf.urls.static import static
from django.conf.urls import handler404
from django.conf.urls import patterns, include, url
from yourapplication import views
##
# Handles the URLS calls
urlpatterns = patterns('',
# url(r'^$', include('app.homepage.urls')),
)
handler404 = views.error404
到應用程序的views.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)
的祕密是在最後一行:狀態= 404
希望^ h elped!
我期待看到社區對這種方法的投入。 =)
這個問題會從一些代碼中受益。 –
謝謝你的迴應。我已經明白了!現在發佈響應。 – yuechen
糟糕。猜猜StackOverflow不會讓我回答自己的問題沒有8小時通過。我會在這裏發佈: 我已經爲404頁面創建了我自己的視圖(即通過設置handler404 = views.my_404_view)。但是,我的404視圖使用了「渲染」快捷鍵,因此總是返回200狀態碼。在返回HttpResponse之前,我應該沒有使用該快捷方式並設置了response.status_code。 一旦我註釋掉了我的handler404,一切都按預期工作。 – yuechen