How Do I Use A Decimal Number In A Django URL Pattern?

Jason Champion picture Jason Champion · Jul 15, 2009 · Viewed 9.5k times · Source

I'd like to use a number with a decimal point in a Django URL pattern but I'm not sure whether it's actually possible (I'm not a regex expert).

Here's what I want to use for URLs:

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

Those URLs would show items valued at $0.01 or $0.05. Sure, I could take the easy way out and pass the value in cents so it would be /item/value/1, but I'd like to receive the argument in my view as a decimal data type rather than as an integer (and I may have to deal with fractions of a cent at some point). Is it possible to write a regex in a Django URL pattern that will handle this?

Answer

Evgeny picture Evgeny · Jul 15, 2009

It can be something like

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

url should not start with slash.

in views you can have function:

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