我正在阅读Django教程,并在第5部分:测试。我遇到了问题,我正在使用DetailView和ListView“快捷方式”视图来分解代码(如教程所示),但是当显示404页面时,将返回200状态代码。难道我做错了什么?教程说状态代码应该是404。
谢谢!
答案 0 :(得分:4)
您需要将Http标头定义为404状态。
return HttpResponse(content=template.render(context), content_type='text/html; charset=utf-8', status=404)
重要的是告知搜索引擎当前页面是404.垃圾邮件发送者有时会创建许多可能会引导您到某个地方的网址,但随后会为您提供其他内容。他们经常制作许多不同的地址,为您提供几乎完全相同的内容。而且由于它不是用户友好的,大多数SEO指南都会对此进行惩罚。因此,如果您有大量地址显示相同的伪404内容,则搜索网站的爬网系统看起来不太好。因此,您要确保您作为自定义404使用的页面具有404状态。
如果您正在尝试制作自定义404页面,那么这是一个很好的方法:
进入你的应用程序的urls.py add:
# 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 add:
# 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
希望它有所帮助!
我期待社区对此方法的投入。 =)
答案 1 :(得分:0)
你可以
return HttpResponseNotFound(render_to_string('404.html'))
代替。