2009-07-14 7 views
5

Django URL kalıbını bir ondalık noktasıyla bir sayı kullanmak istiyorum ama bunun aslında mümkün olup emin değilim.Django URL Kalıbında Ondalık Bir Sayı Nasıl Kullanılır? (Ben regex uzman değilim)

Burada URL'ler için kullanmak istediğiniz ne:

/item/value/0.01 
/item/value/0.05 

Bu URL'ler 0,01 $ veya 0,05 $ değerinde öğeleri gösterecektir. Tabii, kolay yoldan çıkarıp sent değer geçmesi o/madde/değer/1, olurdu ama ondalık veri türü olarak yerine bir tamsayı olarak bana göre bağımsız değişken almak istiyorum böylece (ve olabilir Bir noktada yüzde kuruşla uğraşmak zorunda kalabilirim). Bunu işleyecek bir Django URL kalıbında bir regex yazmak mümkün mü?

cevap

13

Bu olabilir eğik çizgi ile başlar olmamalıdır

urlpatterns = patterns('', 
    (r'^item/value/(?P<value>\d+\.\d{2})/$', 'myapp.views.byvalue'), 
    ... more urls 
) 

url gibi bir şey.

işlevi olabilir görünümlerinde

:

def byvalue(request,value='0.99'): 
    try: 
     value = float(value) 
    except: 
     ... 
+0

Lütfen çıplak bir '' haricinde 'kullanmayın, çünkü bu hataların çoğunu saklayarak her bir hatayı yiyecektir. Her sonrası bulmacanın bir parça eklendi, –

13

Özellikle Django bilmem ama bu URL'yi uymalıdır:

r"^/item/value/(\d+\.\d+)$" 
+6

sahip olmak istiyorsanız * bir * url içinde ints ve floats: Böyle bir şey yazın: 'r" ^/item/value/(\ d + (?: \. \ d +)) $ "' – Boldewyn

+0

+1 daha genel bir cevap için Ondalıktan sonra iki basamaklı sayılar) – btk

+0

@Boldewyn Ur çözümü çalışmıyor. Ne için ne de şamandıralar için ... onu kullanmayı denedim ama –

3

değerleri sadece 0,01 $ veya $ 0.05, Harto deseni böyle belirtilebilir edilir kabul edilmesi halinde:

r"^/item/value/(\d\.\d{2})$" 
+0

teşekkür ederiz: Büyük olasılıkla sadece 'ValueError' en (' 'hariç ValueError) yakalamak istiyorum. Evgeny sihirli mermiye sahipti. –

İlgili konular