如何在Django URL模式中使用十进制数字?

问题描述:

我想在Django URL模式中使用带小数点的数字,但我不确定它是否实际可行(我不是正则表达式专家)。如何在Django URL模式中使用十进制数字?

这是我想使用的网址是什么:

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

这些网址会显示价值$ 0.01或$ 0.05物品。当然,我可以采取简单的方法,并以毫秒为单位传递值,以便将它作为/ item/value/1,但我希望在我的视图中将该参数作为十进制数据类型而不是整数(并且我可能不得不在一定程度上处理几分之一)。是否有可能编写一个Django URL模式的正则表达式来处理这个问题?

它可以像

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

网址不应以斜线开始。

在视图中可以有功能:

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

我不知道Django的明确,但这应该匹配的网址:

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

如果你想拥有ints and float in * one * url,写下如下:`r“^/item/value /(\ d +(?:\。\ d +))$”` – Boldewyn 2009-07-15 12:26:47

+0

+1对于更通用的答案(不限于小数点后有两位数字的数字) – btk 2012-05-12 21:28:18

+0

@Boldewyn Ur解决方案无效。无论是整数或浮动...我试图用它,但无济于事 – 2013-10-01 05:49:32

如果被接受只$ 0.01或$ 0.05的harto的模式可以像这样指定的值:

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