自定义Django 404错误

KVI*_*ISH 9 django http-status-code-404

我有一个404.html页面,但在某些情况下我希望能够发送一条json错误消息(对于404和500等).我看了以下页面:

https://docs.djangoproject.com/en/dev/topics/http/views/#the-404-page-not-found-view

是否有任何示例显示实现?我在我的urls.py中有它但是在发生错误时它没有被拾取.

KVI*_*ISH 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
Run Code Online (Sandbox Code Playgroud)

当你去那个控制器时,你可以按照自己的意愿做任何事情.


Fab*_*sco 12

除了上一个答案之外,重要的是要说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
Run Code Online (Sandbox Code Playgroud)

进入你的应用程序的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)
Run Code Online (Sandbox Code Playgroud)

秘密在最后一行:status = 404

希望它有所帮助!

我期待社区对这种方法的投入.=)


Gau*_*wal 6

基本:

要定义用于处理404错误的自定义视图,请在URL配置中定义handler404的视图,例如 handler404 = 'views.error404'

除了基础知识,还需要注意一些事项(自定义404视图):

  1. 它仅在Debug=False模式下启用.
  2. 在大多数答案中,更多地忽略了一个(这就是我绞尽脑汁).

    404视图默认为

    django.views.defaults.page_not_found(request, exception, template_name='404.html')

    注意参数 exception

    这导致从def get_exception_response(self, request, resolver, status_code, exception)定义的函数内导致404到500重定向,core.handlers.base因为它找不到参数exception