2012-07-03 34 views
8

मेरे पास 404.html पृष्ठ है, लेकिन कुछ मामलों में मैं एक जेसन त्रुटि संदेश (404 और 500, आदि के लिए) भेजने में सक्षम होना चाहता हूं।कस्टम Django 404 त्रुटि

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

वहाँ कार्यान्वयन पता चलता है कि उदाहरण के किसी भी प्रकार का है: मैं निम्नलिखित पेज पढ़ा है? मेरे पास यह आपके urls.py में है लेकिन यह किसी त्रुटि की स्थिति में नहीं उठाया जा रहा है।

उत्तर

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 है। स्पैमर कभी-कभी बहुत सारे यूआरएल बनाता है जो ऐसा प्रतीत होता है जो आपको किसी स्थान पर ले जाएगा, लेकिन फिर आपको एक और सामग्री परोसता है। वे अक्सर कई अलग-अलग पते बनाते हैं जो आपको लगभग उसी सामग्री की सेवा करते हैं। और क्योंकि यह उपयोगकर्ता के अनुकूल नहीं है, इसलिए अधिकांश एसईओ गाइड लाइनें दंडित करती हैं। इसलिए यदि आपके पास एक ही छद्म -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) 

गुप्त पिछले में है रेखा: स्थिति = 404

आशा है कि इससे मदद मिलेगी!

मैं इस दृष्टिकोण में समुदाय इनपुट देखने के लिए तत्पर हूं। =)

+0

"views.py" में "app1 आयात दृश्यों से" लिखते समय मुझे "नाम दृश्य आयात नहीं किया जा सकता"। मेरा ऐप नाम "एप 1" – Timo

+0

एप्लिकेशन का urls.py का अर्थ है: यदि आपके पास कोई प्रोजेक्ट 'वेबसाइट' और ऐप 'ब्लॉग' है। फिर आपको 'website.urls.py' में 'handler404' जोड़ना चाहिए 'blog.urls.py' –

4

मूल बातें:

, कुछ चीजों के बारे में नोट करने के लिए 404 त्रुटियों से निपटने के लिए कस्टम दृश्य को परिभाषित करने के यूआरएल config, handler404 के लिए एक दृश्य में परिभाषित करते हैं, जैसे handler404 = 'views.error404'

मूल बातें से

अलावा (custom 404 views):

  1. यह केवल Debug=False मोड में सक्षम होगा।
  2. और अधिकतर उत्तरों में एक को अनदेखा किया गया (और यह मेरे दिमाग से बाहर निकला)।करने के लिए

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

    सूचना पैरामीटर exception

    यह एक 404 से 500 पैदा कर रहा था

    404 दृश्य चूक def get_exception_response(self, request, resolver, status_code, exception) समारोह core.handlers.base में परिभाषित के भीतर से अनुप्रेषित के बाद से यह नहीं मिल सका पैरामीटर exception

संबंधित मुद्दे