2012-07-03 107 views

回答

14

这为我工作:

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 

你可以让你的愿望去那个控制器时,它做任何事情。

10

除了上一个答案之外,重要的是说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

希望它有帮助!

我期待看到社区对这种方法的投入。 =)

+0

在“views.py”中写入“from app1 import views”时,我得到“无法导入名称视图”。我的应用程序名称是“app1” – Timo

+0

应用程序的urls.py表示:如果您有一个项目“网站”和一个应用程序“博客”。那么你应该在'website.urls.py'中加'handler404'而不是'blog.urls.py' –

4

基础:

定义自定义视图来处理404错误,定义的URL配置,为handler404视图,像handler404 = 'views.error404'

从基础

除此之外,有些事情需要注意(custom 404 views ):

  1. 它只会在Debug=False模式下启用。
  2. 而且更多的人忽略了一个,在大多数答案中(这使得我的大脑停滞不前)。

    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