2012-07-03 38 views

Trả lời

14

này đã làm việc cho tôi:

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 

Bạn có thể làm cho nó làm bất cứ điều gì như bạn muốn khi đi bộ điều khiển đó.

10

Ngoài câu trả lời trước, điều quan trọng là phải nói rằng views.py sẽ trả về một HttpResponse với trạng thái 404 trong tiêu đề http. Điều quan trọng là phải thông báo cho các công cụ tìm kiếm rằng trang hiện tại là 404. Người gửi spam đôi khi tạo nhiều url có thể dẫn đến một số địa điểm, nhưng sau đó phục vụ bạn nội dung khác. Họ thường xuyên thực hiện rất nhiều địa chỉ khác nhau phục vụ bạn gần như cùng một nội dung chính xác. Và bởi vì nó không phải là người dùng thân thiện, hầu hết các dòng hướng dẫn SEO phạt đó. Vì vậy, nếu bạn có nhiều địa chỉ hiển thị cùng một nội dung giả 404, nó có thể không tốt cho các hệ thống thu thập thông tin từ các trang web tìm kiếm. Do đó, bạn muốn đảm bảo rằng trang bạn đang phân phát dưới dạng 404 tùy chỉnh có trạng thái 404. Vì vậy, ở đây nó là một cách tốt để đi:

Into add urls.py ứng dụng của bạn:

# 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 

Into add views.py ứng dụng của bạn:

# 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) 

Bí quyết là ở cuối cùng line: status = 404

Hy vọng điều đó đã hữu ích!

Tôi rất mong được thấy đầu vào của cộng đồng theo cách tiếp cận này. =)

+0

Tôi nhận được "không thể nhập chế độ xem tên" khi viết "từ lượt xem nhập app1" trong "views.py". Tên ứng dụng của tôi là "app1" – Timo

+0

urls.py của ứng dụng có nghĩa là: Nếu bạn có dự án 'trang web' và một ứng dụng' blog'. Sau đó, bạn nên thêm 'handler404' vào 'website.urls.py' không phải' blog.urls.py' –

4

Khái niệm cơ bản:

Để xác định xem tùy chỉnh để xử lý 404 lỗi, xác định trong cấu hình URL, một cái nhìn cho handler404, như handler404 = 'views.error404'

Ngoài những điều cơ bản, một số điều cần lưu ý về (custom 404 views):

  1. Nó sẽ chỉ được bật ở chế độ Debug=False.
  2. Và bị bỏ qua nhiều hơn, trong hầu hết các câu trả lời (và điều này làm cho bộ não của tôi bị hỏng).

    Các 404 view mặc định là

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

    Thông báo tham số exception

    này đã gây ra một 404-500 chuyển hướng từ bên trong def get_exception_response(self, request, resolver, status_code, exception) chức năng quy định tại core.handlers.base vì nó không thể tìm thấy thông số exception

Các vấn đề liên quan