2010-07-14 11 views
5

साथ त्रुटि व्यक्तिगत मैं पता है कि कैसे शो get_object_or_404 के साथ व्यक्तिगत त्रुटि चाहते हैं?, मुझे नहीं सामान्य http404 पृष्ठों चाहते हैं, मैं परिणाम के साथ एक संदेश प्रदर्शित करना चाहते हैं कैसे शो get_object_or_404

धन्यवाद :)

कोई भी

है

उत्तर

10

get_object_or_404() अनिवार्य रूप से एक साधारण 5-लाइन फ़ंक्शन है। जब तक आप यह प्रयोग करने के लिए कुछ विशेष कारण है, बस कार्य करें:

try: 
    instance = YourModel.objects.get(pk=something) 
except YourModel.DoesNotExist: 
    return render_to_response('a_template_with_your_error_message.html') 

हैं के लिए जो भी कारण आप get_object_or_404(), आप एक try: ... except Http404: ... ब्लॉक में डालने की कोशिश कर सकते उपयोग करने के लिए है, लेकिन मैं ईमानदारी से नहीं कर सकते हैं इसके लिए एक व्यावहारिक कारण के बारे में सोचो।

0

वह शॉर्टकट के साथ नहीं किया जा सकता है। यह केवल एक Http404 अपवाद उठा सकता है। यदि आप पूर्ण नियंत्रण चाहते हैं तो आपकी सबसे अच्छी शर्त एक कोशिश पकड़ने की कोशिश है। उदाहरण के लिए।

try: 
    obj = Model.objects.get(pk = foo) 
except: 
    return HttpResponseRedirect('/no/foo/for/you') 
    #or 
    return render_to_response ... 
1

और आप वास्तव में ऐसा करने के लिए अपने सर्वर की क्षमता का उपयोग क्यों नहीं कर रहे हैं?
get_object_or_404() डिफ़ॉल्ट 404 पेज पर रीडायरेक्ट कर रहा है?
यदि आप डीबग मोड पर हैं तो आप इसे नहीं देख पाएंगे, लेकिन जब डीजेन्गो तैनात किया जाएगा तो सर्वर के 404 एचटीएमएल पेज का संदर्भ लेंगे।

1

जैसा कि माइकल ने कहा है, get_object_or_404 का उपयोग करते समय आप http 404 पर दिए गए संदेश को कस्टमाइज़ नहीं कर सकते हैं। डीईबीयूजी में प्रदान किया गया संदेश अपवाद के बारे में जानकारी प्रदान करता है हालांकि: "कोई MyModel दिए गए प्रश्न से मेल नहीं खाता है।"

इस पर doc देखें। तीन तर्क हैं: मॉडल, * तर्क, और ** kwargs। अंतिम दो मॉडल पर प्राप्त() या फ़िल्टर() के लिए तर्क बनाने के लिए उपयोग किए जाते हैं।

हालांकि, मैंने जो कारण लिखा है, वह इस सवाल को हल करना है कि हम इसके बजाय get_object_or_404() के रूप में एक सहायक कार्य का उपयोग क्यों करना चाहते हैं, उदाहरण के लिए, मॉडल.डोज़ोटएक्सिस्ट जैसे अपवाद के साथ इसे पकड़ना।

बाद का समाधान मॉडल परत को दृश्य परत जोड़ता है। इस युग्मन को आराम करने के प्रयास में हम django.shortcuts मॉड्यूल [1] में दिए गए नियंत्रित युग्मन का लाभ उठा सकते हैं।

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