2012-12-29 119 views
4

我正在閱讀Django教程,並在第5部分:測試。我遇到了使用DetailView和ListView「快捷方式」視圖來分解代碼的問題(如本教程所建議的),但是當顯示404頁面時,將返回200狀態代碼。難道我做錯了什麼?教程中說狀態碼應該是404.Django 404頁面返回200狀態代碼

謝謝!

+0

這個問題會從一些代碼中受益。 –

+0

謝謝你的迴應。我已經明白了!現在發佈響應。 – yuechen

+1

糟糕。猜猜StackOverflow不會讓我回答自己的問題沒有8小時通過。我會在這裏發佈: 我已經爲404頁面創建了我自己的視圖(即通過設置handler404 = views.my_404_view)。但是,我的404視圖使用了「渲染」快捷鍵,因此總是返回200狀態碼。在返回HttpResponse之前,我應該沒有使用該快捷方式並設置了response.status_code。 一旦我註釋掉了我的handler404,一切都按預期工作。 – yuechen

回答

0

您可以

return HttpResponseNotFound(render_to_string('404.html')) 

代替。

4

您需要定義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!

我期待看到社區對這種方法的投入。 =)