2009-07-14 8 views
5

Ich würde gerne eine Zahl mit einem Dezimalpunkt in einem Django-URL-Muster verwenden, aber ich bin mir nicht sicher, ob es tatsächlich möglich ist (ich bin kein Regex-Experte).Wie verwende ich eine Dezimalzahl in einem Django-URL-Muster?

Hier ist, was ich für URLs verwenden möchten:

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

Diese URLs Artikel bei $ 0,01 oder $ 0,05 geschätzt zeigen würde. Sicher, ich könnte den einfachen Ausweg nehmen und den Wert in Cents übergeben, also wäre es/item/value/1, aber ich würde das Argument meiner Ansicht nach lieber als dezimalen Datentyp als als Ganzzahl (und Ich muss vielleicht irgendwann mit Bruchteilen eines Cents fertig werden). Ist es möglich, einen Regex in ein Django-URL-Muster zu schreiben, das damit umgehen kann?

Antwort

13

Es kann sein, so etwas wie

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

url sollte nicht beginnen mit Schrägstrich.

in Ansichten können Sie Funktion haben:

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

Bitte verwenden Sie kein blankes 'except:', da dies jeden einzelnen Fehler verschlingt und oft Bugs versteckt. Wahrscheinlich möchten Sie nur 'ValueError's (' except ValueError: ') fangen –

13

Ich weiß nicht, über Django speziell, aber das mit der URL übereinstimmen sollte:

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

Wenn Sie haben wollen ints und floats in * one * url, schreiben Sie folgendes: 'r" ^/item/value/(\ d + (?: \. \ d +)) $ "' – Boldewyn

+0

+1 für eine allgemeinere Antwort (nicht beschränkt auf Zahlen mit zwei Nachkommastellen) – btk

+0

@Boldewyn Ur Lösung funktioniert nicht. Weder für Ints noch für Floats ... Ich habe versucht, es zu benutzen, aber ohne Erfolg –

3

Wenn die Werte in Kauf genommen werden, nur 0,01 $ oder 0,05 $, die harto das Muster wie folgt angegeben werden kann:

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

Danke, jeder Beitrag fügte ein kleines Stück des Puzzles hinzu. Evgeny hatte die magische Kugel. –