2009-03-12 2 views
63

मूल रूप से केवल सत्यापित करें कि कोई वस्तु मौजूद है या वस्तु को वापस कर दें। फिर उस क्रिया के आधार पर। मैं सोच रहा हूं कि 404 लौटने के बिना इसे करने का सही तरीका क्या है?404 लौटने के बिना django व्यू में कोई ऑब्जेक्ट मौजूद है या नहीं, यह सत्यापित करने का सही तरीका क्या है?

try: 
    listing = RealEstateListing.objects.get(slug_url = slug) 
except: 
    listing = None 

if listing: 
+0

रासील, क्या मैं सुझाव दे सकता हूं कि आप दूसरे उत्तर को स्वीकार करने पर विचार करें? ऐसा करने का यह सही तरीका प्रतीत होता है, और स्वीकार किए गए उत्तर से थोड़ा अधिक बढ़ा दिया गया है। – Azendale

+0

मैं इसे मान सकता हूं, हालांकि डीजेगो 1.2 में पेश किया गया था जिसे 17 मई 2010 को जारी किया गया था, अगर आपको लगता है कि मेरा प्रश्न 09 में सबमिट किया गया था ... तो उस समय सही जवाब था। यदि मौजूदा() को अब ऐसा करने का सबसे अच्छा तरीका माना जाता है, तो मुझे लगता है कि यह दूसरा जवाब चुनने के लिए अर्थपूर्ण रूप से सही होगा, है ना? – Rasiel

+0

रासील, यह समझ में आता है कि उस समय सही जवाब था। लेकिन स्टैक ओवरफ्लो साइटें सर्वोत्तम उत्तरों के साथ अच्छे/आधिकारिक प्रश्नों के सेट के निर्माण के बारे में उतनी ही प्रतीत होती हैं जितनी साइटें लोगों की समस्याओं के समाधान ढूंढ रही हैं। इसलिए अब यह चुनने का सुझाव है कि अब "आधिकारिक रूप से सही" जवाब क्या है। – Azendale

उत्तर

86

यदि आपको 404 नहीं दिया गया है तो मैं 404 रैपर का उपयोग नहीं करूंगा। यह इरादा का दुरुपयोग है। इसके बजाय, DoNotExist को पकड़ें।

try: 
    listing = RealEstateListing.objects.get(slug_url=slug) 
except RealEstateListing.DoesNotExist: 
    listing = None 
+0

+1: मैं 404 रैपर के बजाय भी इसका उपयोग करूंगा। – Tiago

+0

+1: हाँ, यह स्वीकार किए गए एक से बेहतर समाधान है, यदि आप 404 नहीं चाहते हैं। –

+0

याप, यह बेहतर समाधान – Rasiel

141

तुम भी

if not RealEstateListing.objects.filter(slug_url=slug).exists(): 
    do stuff... 

कर सकते हैं कभी कभी यह कोशिश उपयोग करने के लिए और अधिक स्पष्ट है: को छोड़कर: ब्लॉक और अन्य समय एक लाइनर मौजूद है() साफ देख कोड बनाता है ... सब अपने पर निर्भर करता है आवेदन तर्क

+6

.exists() तेज है: https: //docs.djangoproject .com/en/dev/ref/models/querysets/# मौजूद है – fjsj

+5

यह बेहतर तरीका है और इसका उत्तर – Jharwood

+0

होना चाहिए, मुझे यह भी पसंद है/कोशिश करने के अलावा – robbyt

2
listing = RealEstateListing.objects.filter(slug_url=slug).first() 
+0

यह सबसे अच्छा समाधान है यदि आपको बाद में संभावित ऑब्जेक्ट का उपयोग करने की आवश्यकता है, क्योंकि इसे केवल एक असाइनमेंट की आवश्यकता है, और यह कोशिश/ब्लॉक को छोड़कर उपयोग करने से बचाता है। ध्यान दें कि बाद में 'अगर लिस्टिंग:' के साथ आप अस्तित्व के लिए परीक्षण कर सकते हैं –

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

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