2012-06-05 13 views
7

यह एक अजगर नौसिखिया सवाल हो सकता है ...Django - पकड़ अपवाद

try: 
    #do something 
except: 
    raise Exception('XYZ has gone wrong...') 

डीबग = सच के साथ भी, मैं नहीं चाहता कि इस raise Exception मुझे उस पीले पेज देता है चाहता हूँ। मैं वास्तव में उपयोगकर्ताओं को किसी त्रुटि पृष्ठ पर रीडायरेक्ट करके अपवाद को संभालना चाहता हूं या त्रुटि दिखाता हूं (पृष्ठ के शीर्ष पर एक सीएसएस त्रुटि संदेश दें ...)

मैं इसे कैसे संभाल सकता हूं? क्या कोई मुझे मार्गदर्शन कर सकता है? अगर मैं इसे आसानी से उठाता हूं, तो मुझे पीले डीबग पेज मिलेगा (फिर से, मैं कुछ अपवादों को डीबीयूजी = ट्रू के दौरान डीबग पेज दिखाकर साइट को रोकने से रोकना नहीं चाहता)।

मैं views में इन अपवादों को कैसे प्रबंधित करूं?

धन्यवाद।

+2

एक ... –

+0

@ IgnacioVazquez-अब्राम धन्यवाद की परवरिश नहीं द्वारा प्रारंभ। लेकिन Django के रूप ValidationError कैसे प्राप्त करता है? वे अपवाद नहीं उठाते हैं। वे सिर्फ विचारों को स्ट्रिंग के रूप में अपवाद पास करते हैं। – user423455

+0

@ user423455 वे फ़ॉर्म के भीतर अपवाद पकड़ते हैं और इसे उचित तरीके से संभालते हैं। –

उत्तर

19

आप यहाँ तीन विकल्प हो सकता है।

  1. एक 404 handler or 500 handler
  2. पकड़ने अपवाद कहीं और अपने कोड में उचित पुनर्निर्देशन
  3. प्रदान करें और कर process_exception के साथ लागू किया

मिडिलवेयर उदाहरण कस्टम मिडलवेयर प्रदान करें:

class MyExceptionMiddleware(object): 
    def process_exception(self, request, exception): 
     if not isinstance(exception, SomeExceptionType): 
      return None 
     return HttpResponse('some message') 
+0

धन्यवाद। यह एक महान प्रारंभिक बिंदु है। मैं प्रलेखन को देखूंगा। – user423455

+0

@ user423455 अगर आपको लगता है कि यह आपके प्रश्न का उत्तर देता है तो आपको इस उत्तर पर स्वीकार करना चाहिए। – Maccesch

+0

धन्यवाद जोश! – user423455

4

आप एक 404 त्रुटि को बढ़ाने या बस त्रुटि संदेश के साथ अपने कस्टम त्रुटि पृष्ठ पर उपयोगकर्ता अनुप्रेषित

from django.http import Http404 
#... 
def your_view(request) 
    #... 
    try: 
     #... do something 
    except: 
     raise Http404 
     #or 
     return redirect('your-custom-error-view-name', error='error messsage') 
  1. Django 404 error
  2. Django redirect
+0

धन्यवाद। एक और महान प्रारंभिक बिंदु। मैं अगले कुछ दिनों में कोशिश करूँगा। धन्यवाद! – user423455

0

एक और सुझावका उपयोग करने के लिए किया जा सकता हैत्रुटि संदेश के बजाय फ्लैश संदेश प्रदर्शित करने के लिए।

from django.contrib import messages 
#... 
def another_view(request): 
    #... 
    context = {'foo': 'bar'} 
    try: 
     #... some stuff here 
    except SomeException as e: 
     messages.add_message(request, messages.ERROR, e) 

    return render(request, 'appname/another_view.html', context) 

और फिर ध्यान में रखते हुए के रूप में Django दस्तावेज में:

{% if messages %} 
<ul class="messages"> 
    {% for message in messages %} 
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> 
    {% endfor %} 
</ul> 
{% endif %} 
संबंधित मुद्दे