我有一个404.html页面,但在某些情况下我希望能够发送一条json错误消息(404和500等)。我阅读了以下页面:
https://docs.djangoproject.com/en/dev/topics/http/views/#the-404-page-not-found-view
是否有任何显示实施的示例?我在我的urls.py中有它,但是在发生错误时它没有被拾取。
答案 0 :(得分:16)
这对我有用:
from django.conf.urls import patterns, include, url
from django.views.static import *
from django.conf import settings
from django.conf.urls.defaults import handler404, handler500
from app.views import error
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'app.views.home', name='home'),
)
handler404 = error.error_handler
handler500 = error.error_handler
当你去那个控制器时,你可以按照自己的意愿做任何事情。
答案 1 :(得分:11)
除了上一个答案之外,重要的是要说views.py应该在http标头中返回一个404状态的HttpResponse。重要的是告知搜索引擎当前页面是404.垃圾邮件发送者有时会创建许多可能会引导您到某个地方的网址,但随后会为您提供其他内容。他们经常制作许多不同的地址,为您提供几乎完全相同的内容。而且由于它不是用户友好的,大多数SEO指南都会对此进行惩罚。因此,如果您有大量地址显示相同的伪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
希望它有所帮助!
我期待社区对此方法的投入。 =)
答案 2 :(得分:6)
基础:
要定义处理404错误的自定义视图,请在URL配置中定义handler404的视图,如handler404 = 'views.error404'
除了基础知识外,还需要注意一些事项(custom 404 views):
Debug=False
模式下启用。在大多数答案中更多地忽略了一个(这就是我的大脑)。
404视图默认为
django.views.defaults.page_not_found(request, exception, template_name='404.html')
注意参数exception
由于无法找到参数def get_exception_response(self, request, resolver, status_code, exception)
core.handlers.base
中定义的exception
函数内的404到500重定向
醇>