2011-01-16 14 views
5

मुझे डेटाबेस ऑब्जेक्ट्स में संग्रहीत नामों के आधार पर, Django में गतिशील रूप से URL बनाने पर मेरा दिमाग सेट हो गया है। इन सभी पृष्ठों को एक ही दृश्य से संभाला जाना चाहिए, लेकिन मैं डेटाबेस ऑब्जेक्ट को दृश्य में पारित होने के रूप में पैरामीटर के रूप में पारित करना चाहता हूं। क्या यह संभव है?Django: यूआरएल में डेटा सहित बिना यूआरएल प्रेषक से देखने के लिए डेटा पास?

places = models.Place.objects.all() 
for place in places: 
    name = place.name.lower() 
    urlpatterns += patterns('', 
     url(r'^'+name +'/$', 'misc.views.home', name='places.'+name) 
    ) 

यह यूआरएल के लिए अधिक पैरामीटर जोड़कर बिना, देखने के लिए अतिरिक्त जानकारी पारित करने के लिए संभव है:

यहाँ कोड मैं वर्तमान में है? चूंकि यूआरएल रूट निर्देशिका के लिए हैं, और मुझे अभी भी अन्य मूल्यों पर दिखाने के लिए 404 पेजों की आवश्यकता है, मैं केवल स्ट्रिंग पैरामीटर का उपयोग नहीं कर सकता। यूआरएल को रूट में जोड़ने की कोशिश करने का समाधान है, या कोई और समाधान है?

मुझे लगता है कि मैं नाम पर एक लुकअप कर सकता हूं, क्योंकि सभी यूआरएल को वैसे भी अद्वितीय होना चाहिए। क्या यह एकमात्र अन्य विकल्प है?

उत्तर

18

यह आमतौर पर एक बुरा विचार है क्योंकि यह प्रत्येक अनुरोध के लिए डेटाबेस से पूछताछ करेगा, न केवल उस मॉडल के लिए प्रासंगिक अनुरोध। एक बेहतर विचार सामान्य यूआरएल संरचना के साथ आना और उन सभी के लिए एक ही दृश्य का उपयोग करना है। फिर आप दृश्य के अंदर प्रासंगिक स्थान पुनर्प्राप्त कर सकते हैं, जो उस विशिष्ट दृश्य तक पहुंचने पर केवल डेटाबेस को ही हिट करेगा।

उदाहरण के लिए:

urlpatterns += patterns('', 
    url(r'^places/(?P<name>\w+)/$', 'misc.views.home', name='places.view_place') 
) 

# views.py 
def home(request, name): 
    place = models.Place.objects.get(name__iexact=name) 
    # Do more stuff here 

मुझे पता है यह नहीं है क्या आप वास्तव में करने के लिए कहा है, लेकिन बहुत कम सिर दर्द के साथ आप प्रदान करना चाहिए।

+0

आप एक अच्छी बात उठाते हैं। धन्यवाद! –

18

मुझे लगता है कि आप एक शब्दकोश इस तरह, additional attributes साथ देखने के लिए पारित कर सकते हैं:

url(r'^'+name +'/$', 'misc.views.home', {'place' : place}, name='places.'+name) 

और तुम दृश्य इस पैरामीटर उम्मीद करने के बदल सकते हैं।

+0

यही वह है जिसे मैंने पूछा - यह नहीं पता था कि यह कैसे करता है। @Cide ने एक अच्छा मुद्दा उठाया कि प्रत्येक अनुरोध के लिए डेटाबेस क्वेरी की आवश्यकता होगी, इसलिए मैं उसके उत्तर के साथ जा रहा हूं। धन्यवाद! –

+0

कोई समस्या नहीं, आपको एक समाधान मिला है :) –

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