2010-06-25 20 views
5

Bir url bir görünüme bir 'dizesi' argümanını geçmesine çalışıyorum. urls.py ben böyle devam noktalama, satırbaşıyla, boşluklar dahil dizeleri sorunlar yaşıyorumDjango URL ayrıştırma -pass ham dize

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

gider. Sanırım \ w + 'ı başka bir şeye değiştirmem gerekiyor. Temel olarak, dize kullanıcı tarafından kendi seçtiği bir metinden kopyalanan bir şey olacaktır ve bunu değiştirmek istemiyorum. Herhangi bir karakteri ve özel karakteri kabul etmek istiyorum, böylece görünüm tam olarak kullanıcının kopyaladığı şeye etki eder.

Bunu nasıl değiştirebilirim ?

Teşekkürler! Eğer uygun bir URL'ler olarak anlaşılabilir yalnızca dizeleri kullanabilirsiniz

cevap

2

(mesela 'bu-my_slug olduğu'). ?'u ve yeni başlayanlar için boşlukları düşünün. Django, muhtemelen ne yaparsanız yapın, bunların görüşünüze geçmesini önleyecektir.

İkinci olarak, re modül üzerinde okumak istiyorum. Bu URL eşleşmeleri için sözdizimini ayarlayan şey budur. \w, büyük veya küçük harf, rakam veya _ (temel olarak, tanımlayıcı karakterler hariç olmak üzere, herhangi bir büyük basamağa izin vermez) anlamına gelir.

Bir dizgeyi bir URL'ye iletmenin doğru yolu bir form parametresidir (ör. URL'de ?paramName='dan sonra ve özel karakterler kaçtıysa, boşluklar + olarak değiştirildi).

4

Bildirim, url olarak herhangi bir dize geçmek iyi bir fikir değildir.

benim URL'ler içinde dizeleri değerlere izin vermek için bu normal ifadeler kullanabilirsiniz:

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

Bu 'salyangozlar olmasını sağlar; senin url: Öncelikle kapalı, URL'ler izin verilmez karakter bir yeri vardır

+0

BTW, '' _' ve 'Bir karakterin yerine sonra ilk şeyse bir dizi işareti olarak kabul edilir -'' '[(ve isteğe bağlı'^') Eğer w' yazabilirsiniz içerir \ yüzden '(P [- \ w] +)'. –