2011-03-31 17 views
15

, ben biraz şöyle hangi maç için istediğiniz bir URL: ''Soru işareti karakterini bir Django URL'sinde nasıl eşleştirebilirim? Benim Django uygulamasında

/mydjangoapp/?parameter1=hello&parameter2=world 

burada sorundur karakter düzenli bir regex karakteri.

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

ama hala şans:

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

Bu benim ikinci girişimi oldu:

Ben bu maç için çeşitli yollar denedi ... Bu benim ilk girişimi oldu!

'?' Ile nasıl eşleşebileceğimi bilen var mı? Tam olarak bir Django URL'sinde mi?

+0

İlk girişiminiz iyi görünüyor. –

+0

Teşekkürler Bradley ... Tekrar deneyeceğim - belki başka bir şey yanlış var! –

+1

IIRC, URL dağıtıcısı, eşleşmeden önce sorgu dizesini çıkarır, böylece "r" \ "işareti olan bir regex eşleşmez. Ayrıca, bu yaklaşım kötüdür, çünkü çalışsa bile, sadece her iki parametreyi de gerektirmez, aynı zamanda parametrelerin sırasını da zorlar. 'Request.GET' kullanmak daha iyidir. –

cevap

32

aracılığıyla yapmayın sorgu dizesi erişebilirler. URL Dispatcher ile sorgu dizesi eşleşmemelidir. request.GET sözlüğünü kullanarak tüm değerlere erişebilirsiniz.

URL'lerin

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

fonksiyon

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

"pbanalytics/log /" dizinindeki her şeyi eşleştirmek istemediğiniz sürece, normal ifadenin sonunda '$' olmasını isteyebilirsiniz. Ayrıca, IIRC, 'request.GET.get()', anahtarın istekte olmaması durumunda varsayılan değer olan ikinci bir parametreyi alır. –

+0

Ahhhh ..... Anladım. Bu, URL dağıtıcısında devasa normal ifadeler yerine, URL'lerima parametrelerin ele alınmasının çok daha iyi bir yolu olacaktır! Size ve yorum ve cevap gönderen herkese teşekkürler. –

+0

@Mike - Evet, iyi fikir! N –

1

? karakter, regex'te ayrılmış bir semboldür, evet. İlk teşebbüsünüz buna uygun şekilde kaçmak gibi görünüyor. .

Ancak ? in a URLyolunun sonu ve bunun gibi sorgu kısmının başlangıcı (aynı zamanda. protocol://host/path/?query#hash Django's URL dispatcher sen AFAIK, sorgu kısmı temelinde URL'ler sevk izin vermez

Benim önerim görünümünüzü işlevine request.GET parametreye dayalı gönderilmesini yapan bir django görünüm yazma olurdu.

2

Django'nın URL modelleri yalnızca bir URL'nin yol bileşenini maç. Sen sorgu dizesi üzerinde maç için çalışıyoruz Ayrıca, bu yüzden sorun yaşıyorsunuz. İlk regex'iniz istediğini yapar, sadece yol bileşeniyle eşleşen olmanız dışında.

senin görünümünde, request.GET

1

orijinal soru yakalama tüm URL gönderme var içinde yani ne yapmanın yolu ...

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

veya

url(r'^mens/(?P<pl_slug>\?+)/$', 'main.views.mens',), 
0 Bu neden gerekli olduğu

kadarıyla , URL tam olarak müşterileri için ve müşterilerine genel olarak iyi "kalıcı" ya da iyi bir sunum vermeyin GET. Müşteriler çoğu zaman URL'nin biçimlendirilmesini isterler.

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

bu son kullanıcı için çok daha okunabilir arayüz ve müşteri için daha iyi bir genel sunum sağlar.