2011-03-31 9 views
15

मेरी Django आवेदन में, मुझे लगता है मैं जो एक छोटे से इस तरह दिखता है मिलान करने के लिए चाहते हैं एक यूआरएल है: '?'मैं Django यूआरएल में प्रश्न चिह्न चरित्र से कैसे मेल करूं?

/mydjangoapp/?parameter1=hello&parameter2=world 

समस्या यहाँ है चरित्र एक आरक्षित रेगेक्स चरित्र है।

मैं तरीके इस मैच के लिए के एक नंबर की कोशिश की है ... यह मेरा पहला प्रयास था:

(r'^pbanalytics/log/\\?parameter1=(?P<parameter1>[\w0-9-]+)&parameter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction') 

लेकिन फिर भी प्रयास विफल:

(r'^pbanalytics/log/\?parameter1=(?P<parameter1>[\w0-9-]+)&parameter2=(?P<parameter2>[\w0-9-]+), 'mydjangoapp.myFunction') 

यह मेरा दूसरा प्रयास था!

क्या कोई जानता है कि मैं कैसे '?' से मेल खा सकता हूं वास्तव में एक Django यूआरएल में?

+0

आपका पहला प्रयास ठीक दिखता है। –

+0

धन्यवाद ब्रैडली ... मैं फिर कोशिश करूंगा - शायद मुझे कुछ और गड़बड़ हो गई! –

+1

आईआईआरसी, यूआरएल प्रेषक मिलान करने से पहले क्वेरी स्ट्रिंग को बंद कर देता है, इसलिए इसमें 'r' \? '' वाला रेगेक्स मेल नहीं खाएगा। साथ ही, यह दृष्टिकोण खराब है, भले ही यह काम करता है, न केवल दोनों पैरामीटर की आवश्यकता होती है बल्कि यह पैरामीटर के क्रम को भी बल देती है। 'Request.GET' का उपयोग करने के लिए बेहतर है। –

उत्तर

32

क्वेरी स्ट्रिंग पहुँच सकते हैं। आपको URL डिस्पैचर के साथ क्वेरी स्ट्रिंग से मेल नहीं करना चाहिए। आप request.GET शब्दकोश का उपयोग कर सभी मूल्यों तक पहुंच सकते हैं।

यूआरएल

(r'^pbanalytics/log/$', 'mydjangoapp.myFunction') 

समारोह

def myFunction(request) 
    param1 = request.GET.get('param1') 
+1

रेगेक्स के अंत में एक '$' चाहते हैं जब तक आप निर्देशिका "pbanalytics/log /" निर्देशिका में सबकुछ मिलान नहीं करना चाहते। इसके अलावा, आईआईआरसी, 'request.GET.get() 'एक दूसरा पैरामीटर लेता है जो कि डिफ़ॉल्ट मान है यदि कुंजी अनुरोध में नहीं है। –

+0

अहह्ह ..... मैं समझता हूं। यूआरएल प्रेषक में भारी रेगेक्स अभिव्यक्तियों की बजाय, यह वास्तव में मेरे यूआरएल के पैरामीटर को संभालने का एक बहुत अच्छा तरीका होगा! आपको और हर किसी के लिए धन्यवाद जिन्होंने टिप्पणियां और उत्तर पोस्ट किए हैं। –

+0

@ माइक - हाँ, एक अच्छा विचार! एन –

1

? चरित्र रेगेक्स में एक आरक्षित प्रतीक है, हां। आपका पहला प्रयास इसके ठीक से बचने जैसा दिखता है। ।

हालांकि, ? in a URL भी पथ के अंत और क्वेरी भाग की शुरुआत में (इस तरह है:। protocol://host/path/?query#hash Django's URL dispatcher नहीं करता आप क्वेरी भाग के आधार पर URL प्रेषण, AFAIK

मेरे सुझाव एक Django राय यह है कि आपके विचार कार्य करने के लिए request.GET पैरामीटर के आधार पर भेजने करता लेखन होगा।

2

Django के URL प्रतिमानों केवल किसी URL का पथ घटक मेल खाते हैं। आप क्वेरी स्ट्रिंग पर मैच के लिए कोशिश कर रहे हैं साथ ही, यही कारण है कि आपको परेशानी हो रही है। आपका पहला रेगेक्स जो आप चाहते थे वह करता है, सिवाय इसके कि आपको केवल पथ घटक से मेल खाना चाहिए।

आपके विचार में आप मत के माध्यम से request.GET

1

तरीका क्या मूल प्रश्न कैच-ऑल यूआरएल प्रेषण वर अर्थात् गया था करने के लिए ...

url(r'^mens/(?P<pl_slug>.+)/$', 'main.views.mens',), 

या

url(r'^mens/(?P<pl_slug>\?+)/$', 'main.views.mens',), 

जहां तक ​​यह आवश्यक है, यूआरएल प्राप्त करने के लिए ग्राहकों और ग्राहकों के लिए सामान्य रूप से अच्छे "परमालिंक" या अच्छी प्रस्तुति प्रदान नहीं करते हैं।

ग्राहक अक्सर यूआरएल प्रारूपित करने का अनुरोध करते हैं i.e.

www.example-clothing-site.com/mens/tops/shirts/t-shirts/Big_Brown_Shirt3XL 

यह अंतिम उपयोगकर्ता के लिए एक बहुत अधिक पठनीय इंटरफ़ेस है और ग्राहक के लिए बेहतर समग्र प्रस्तुति प्रदान करता है।

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