2009-07-14 10 views
5

私はDjango URLパターンで小数点以下の数字を使用したいと思いますが、実際に可能かどうかはわかりません(私は正規表現の専門家ではありません)。DjangoのURLパターンで10進数を使用するにはどうすればよいですか?

は、ここで私はURLに使いたいものです。

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

これらのURLは$ 0.01 $ 0.05で価値のアイテムを表示します。確かに、簡単な方法を取ってセントの値を/ item/value/1になるように渡すことができますが、私の見解では、整数ではなく小数点データ型として引数を受け取りたい私はある時点で1セントの分数を処理しなければならないかもしれない)。これを処理するDjangoのURLパターンに正規表現を書くことは可能ですか?

答えて

13

何か

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

のようなURLはスラッシュで始めるべきではありません。

あなたは機能を持たせることができるビューで

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

裸の 'except:'を使わないでください。これはすべての単一のエラーを食べてしまい、しばしばバグを隠してしまいます。あなたはたぶん 'ValueError'(' ValueError: 'を除く)をキャッチしたいと思うかもしれません。 –

13

私は特にDjangoのことは知らないが、これはURLと一致する必要があります:

それができる
r"^/item/value/(\d+\.\d+)$" 
+6

あなたが持っているしたい場合は* "*"/item/value /(\ d +(?:\。\ d +))$ "' – Boldewyn

+0

+1一般的な答え(これに限定されません)小数点以下2桁の数字) – btk

+0

@Boldewyn Urソリューションは機能しません。 intや浮動小数点のどちらでもない...私はそれを使用しようとしたが役に立たなかった –

3

値はたったの$ 0.01 $ 0.05、hartoのパターンは次のように指定することができるされて受け入れられる場合:

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

ありがとう、それぞれの投稿はパズルの小さな部分を追加しました。エフゲニーは魔法の弾丸を持っていた。 –