我有一个404.html页面,但在某些情况下,我想能够发送json错误消息(对于404和500等)。我仔细阅读以下页面:自定义Django 404错误
https://docs.djangoproject.com/en/dev/topics/http/views/#the-404-page-not-found-view
是否有任何形式的例子,显示了执行?我已经在我的urls.py中找到了它,但是如果发生错误,它不会被拾取。
我有一个404.html页面,但在某些情况下,我想能够发送json错误消息(对于404和500等)。我仔细阅读以下页面:自定义Django 404错误
https://docs.djangoproject.com/en/dev/topics/http/views/#the-404-page-not-found-view
是否有任何形式的例子,显示了执行?我已经在我的urls.py中找到了它,但是如果发生错误,它不会被拾取。
这为我工作:
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
你可以让你的愿望去那个控制器时,它做任何事情。
除了上一个答案之外,重要的是说views.py应该在http头中返回一个带有404状态的HttpResponse。通知搜索引擎当前页面是404是非常重要的。垃圾邮件发送者有时会创建很多网址,看起来会导致你到某个地方,但是会为你提供另一个内容。他们经常会让很多不同的地址为您提供几乎完全相同的内容。而且因为它不是用户友好的,所以大多数SEO指南都会对此进行惩罚。因此,如果您有许多地址显示相同的伪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)
秘诀是在上line:status = 404
希望它有帮助!
我期待看到社区对这种方法的投入。 =)
基础:
定义自定义视图来处理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
这是使404〜500从在core.handlers.base
定义def get_exception_response(self, request, resolver, status_code, exception)
函数内重定向,因为它无法找到参数exception
在“views.py”中写入“from app1 import views”时,我得到“无法导入名称视图”。我的应用程序名称是“app1” – Timo
应用程序的urls.py表示:如果您有一个项目“网站”和一个应用程序“博客”。那么你应该在'website.urls.py'中加'handler404'而不是'blog.urls.py' –