2010-06-25 12 views
5

मैं एक यूआरएल के साथ एक 'स्ट्रिंग' तर्क पारित करने की कोशिश कर रहा हूं। urls.py चला जाता हैDjango url पार्सिंग -पास कच्ची स्ट्रिंग

('^add/(?P<string>\w+)', add), 

मैं विराम चिह्न, नई-पंक्तियों, रिक्त स्थान और इतने पर सहित तार के साथ समस्या आ रही है। मुझे लगता है कि मुझे कुछ और में \ w + बदलना है। मूल रूप से स्ट्रिंग उपयोगकर्ता द्वारा अपनी पसंद के पाठ से कॉपी की जाएगी, और मैं इसे बदलना नहीं चाहता हूं। मैं किसी भी चरित्र और विशेष चरित्र को स्वीकार करना चाहता हूं ताकि दृश्य बिल्कुल उस पर कार्य करता है जिस पर उपयोगकर्ता ने प्रतिलिपि बनाई है।

मैं इसे कैसे बदल सकता हूं?

धन्यवाद!

उत्तर

2

ठीक है, पहले, ऐसे कई वर्ण हैं जिन्हें URL में अनुमति नहीं है। ? और स्टार्टर्स के लिए रिक्त स्थान पर विचार करें। Django शायद इन्हें आपके विचार में पारित होने से रोक देगा चाहे आप क्या करें।

दूसरा, आप re मॉड्यूल पर पढ़ना चाहते हैं। यह उन यूआरएल मैचों के लिए वाक्यविन्यास सेट करता है। \w का अर्थ है कोई ऊपरी या लोअरकेस अक्षर, अंक, या _ (मूल रूप से, पहचानकर्ता वर्ण, सिवाय इसके कि यह एक प्रमुख अंक को अस्वीकार नहीं करता है)।

यूआरएल में एक स्ट्रिंग पास करने का सही तरीका फॉर्म पैरामीटर के रूप में है (यानी यूआरएल में ?paramName= के बाद, और विशेष पात्रों से बच निकले, जैसे रिक्त स्थान + में बदल गए)।

4

ध्यान दें कि आप केवल उन्हीं स्ट्रिंग्स का उपयोग कर सकते हैं जिन्हें उचित यूआरएल के रूप में समझा जा सकता है, यूआरएल के रूप में किसी स्ट्रिंग को पास करना अच्छा नहीं है।

मैं अपने यूआरएल में तार मूल्यों अनुमति देने के लिए इस regex का उपयोग:

(?P<string>[\w\-]+) 

यह 'मल की अनुमति देता है; आपके यूआरएल में (जैसे: 'this-is-my_slug')

+0

बीटीडब्ल्यू, '\ w' में '_'' शामिल है, और' -' को '['(और वैकल्पिक' ^') के बाद पहली चीज़ है, तो एक श्रेणी मार्कर की बजाय एक चरित्र के रूप में माना जाता है, ताकि आप लिख सकें '(? पी [- \ डब्ल्यू] +)'। –

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