2013-02-06 16 views
7

तो दुर्भाग्यवश मैं खुद को ऐसी परिस्थिति में ढूंढता हूं जहां मुझे एक ही नाम के साथ एकाधिक पैरामीटर प्रदान करने वाले यूआरएल को संभालने के लिए मौजूदा पिलोन एप्लिकेशन को संशोधित करने की आवश्यकता है। निम्नलिखित ... डोमेन की तरह कुछ: पोर्ट/कार्रवाई ग = 1 & v = 3 & ग = 4पिलोन में एक यूआरएल से एक ही नाम के साथ कई पैरामीटर कैसे प्राप्त करें?

पारंपरिक मानकों इस तरह से पहुंचा जाता है ...

from pylons import request 
c = request.params.get("c") 
#or 
c = request.params["c"] 

यह वापस आ जाएगी " 4 "किसी भी मामले में मूल्य के रूप में, क्योंकि आखिरी मूल्य को अनदेखा करते हुए इन स्थितियों में मानक व्यवहार लगता है। हालांकि मुझे वास्तव में क्या चाहिए, दोनों को एक्सेस करने में सक्षम होना है। मैं request.params को प्रिंट करके कुछ इस तरह मिलता है ...

NestedMultiDict([(u'c', u'1'),(u'v', u'3'),(u'c', u'4')]) 

मैं नहीं या कि सी के लिए पहला मान पहुँच इसे में सूचकांक के लिए एक रास्ता मिल गया है, की कोशिश की।

मैं इस समस्या से संबंधित एक similar question पाया है, लेकिन पीएचपी के साथ हल:

इन पंक्तियों के साथ

कुछ मेरे लिए अच्छी तरह से काम करेगा, लेकिन शायद कुछ अजगर कोड है कि Pylons में फिट होगा। क्या किसी ने पहले ऐसा कुछ किया है?

+0

फ़ॉर्मेटिंग को ठीक करने के लिए धन्यवाद! यह स्पष्ट रूप से इरादा से बाहर निकलने का तरीका नहीं निकला ... –

+1

अगर मैं गलत हूं तो मुझे सही करें, लेकिन एक ही अनुरोध के भीतर कई कुंजी वस्तुएं मौजूद नहीं हो सकती हैं? यह सभी परिभाषाओं के खिलाफ है .. – Torxed

+0

क्या आप कह रहे हैं कि एक ही नाम के साथ दो पैरामीटर नहीं होना चाहिए? यदि यह आपका प्रश्न है, तो मैं मानता हूं कि सर्वोत्तम अभ्यास इससे बचेंगे। यद्यपि यह सख्ती से मना नहीं है। उदाहरण के लिए, इस यूआरएल को अपने ब्राउज़र में दर्ज करने का प्रयास करें (https://www.google.com/search?q=one&q=two)। दो क्वेरी पैरामीटर हैं, इसलिए Google उन्हें दोनों को एक साथ जोड़ता है। यह कम या ज्यादा है जो मैं करने में सक्षम होना चाहता हूं। –

उत्तर

8

डॉक्स से - http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/glossary.html#term-multidict:

multidict एक शब्दकोश प्रत्येक कुंजी के लिए एक से अधिक मान सकते हैं कि आदेश दिया। सामान्य शब्दकोश इंटरफ़ेस में getall, getone, मिश्रित, add और dict_of_lists विधियों को जोड़ता है। मल्टीडिक्ट और pyramid.interfaces.IMultiDict देखें।

तो बस फोन:

request.params.getall('c') 
+0

सही जवाब, और मैं दस्तावेज़ों को संदर्भ के रूप में सराहना करता हूं। आपको बहुत - बहुत धन्यवाद!+1 और स्वीकृत –

1

एक अभ्यास के रूप में, other question में PHP के पायथन में एक प्रतिपादन (भी यूआरएल डिकोडिंग के लिए की जरूरत को वर्णन करने के एक डमी पैरामीटर शामिल है):

from urlparse import urlparse 
from urllib import unquote 

url = 'http://www.example.com/action?c=1&v=3&c=4&d=%3A%24%23%40%3D%3F%25%5EQ%5E%24' 

url = urlparse(url) 

params = url.query.split('&') 
params = [ tuple(p.split('=')) for p in params ] 
params = [ [unquote(p[0]), unquote(p[1])] for p in params ] 

print params 

# [['c', '1'], ['v', '3'], ['c', '4'], ['d', ':$#@=?%^Q^$']] 
+0

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

+0

धन्यवाद - मैंने इसे एक ही भावना में रखा है और सही जवाब जॉन क्लेमेंट्स द्वारा किया गया है। – gauden

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