2013-02-06 15 views
7

Maalesef, aynı adı taşıyan birden çok parametre sağlayan URL'leri işlemek için mevcut bir Pylons uygulamasını değiştirmem gereken durumlarda kendimi buluyorum. Aşağıdaki ... alanı gibi bir şey:? portu/eylem parametreleri bu şekilde erişilir c = 1 & v = 3 & c = 4Pylons'ta bir URL'den aynı ada sahip birden çok parametre nasıl alınır?

Geleneksel ...

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

Bu dönecektir " 4 "her iki durumda da değer olarak, çünkü tüm değerleri göz ardı etmemek, ancak son değer bu durumlarda standart davranış gibi görünmektedir. Yine de gerçekten ihtiyacım olan şey, her ikisine de erişebilmek. Ben bunun içine endeksi için bir yol bulduk, veya erişim c ilk değere o değil

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

... request.params baskı ve böyle bir şey olsun çalıştı.

Ben bu sorunu ile ilgili bir similar question bulundu, ancak PHP ile çözüldü: bu satırlar boyunca

şey benim için iyi çalışabilir, ama belki bazı Python kodu elektrik direği sığması söyledi. Daha önce böyle bir şeyle uğraşan var mı? Dokümanlar

+0

Biçimlendirmeyi düzeltdiğiniz için teşekkür ederiz! Açıkça benim istediğim şekilde çıkmadı ... –

+1

Yanlış mıyım, yoksa aynı sorguda birden fazla KEY nesnesi bulunamıyor mu? Bu tüm tanımlara aykırı .. – Torxed

+0

Aynı isimle iki parametre olmamalı mı? Eğer sorunuz buysa, en iyi uygulamaların bundan kaçınacağına katılıyorum. Yine de kesinlikle yasak değil. Örneğin, bu URL’yi tarayıcınıza girmeyi deneyin (https://www.google.com/search?q=one&q=two). İki sorgu parametresi vardır, bu yüzden Google bunları ikisini bir arada birleştirir. Bu az çok yapmak istediğim şey. –

cevap

8

-http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/glossary.html#term-multidict:

multidict An Her anahtar için birden fazla değere sahip olabilir sözlüğünü emretti. Normal sözlük arabirimine getall, getone, mixed, add ve dict_of_lists yöntemlerini ekler. Multidict ve pyramid.interfaces.IMultiDict sayfasına bakın.

Dolayısıyla, sadece çağrı: Alıştırma olarak

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

Mükemmel cevap, ve referans olarak dokümanlar için minnettarım. Çok teşekkür ederim!+1 ve kabul –

1

, other question içinde PHP Python bir render (ayrıca url kod çözme ihtiyacını göstermek için bir kukla parametresini içerir):

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

Kesinlikle GET içeren tüm istek var ve ben bunun dışında URL ayrıştırmak olabilir, ancak aslında bir dize olarak url yok. Bu yaklaşım da geçerli gibi görünüyor, ama bir Pylons uygulaması bağlamında biraz daha karmaşık. Buna benzer bir sorunu olan birine yardımcı olacağını umarak +1 veririm. –

+0

Teşekkürler - Ben aynı ruhu içinde koydum ve doğru cevap Jon Clements tarafından tabii ki. – gauden

İlgili konular