¿Cómo uso un número decimal en un patrón de URL de Django?

Me gustaría usar un número con un punto decimal en un patrón de URL de Django pero no estoy seguro de que sea realmente posible (no soy un experto en expresiones regulares).

Esto es lo que quiero usar para las URL:

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

Esos URL mostrarían elementos valorados en $ 0.01 o $ 0.05. Claro, podría tomar el camino más fácil y pasar el valor en centavos para que sea / item / value / 1, pero me gustaría recibir el argumento en mi vista como un tipo de datos decimal en lugar de como un entero (y Puede que tenga que lidiar con fracciones de un centavo en algún momento). ¿Es posible escribir una expresión regular en un patrón de URL de Django que manejará esto?

Puede ser algo como

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

url no debe comenzar con barra diagonal.

En las vistas puedes tener la función:

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

No sé específicamente sobre Django, pero esto debería coincidir con la URL:

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

Si los valores que se aceptan son solo $ 0.01 o $ 0.05, el patrón del harto se puede especificar de la siguiente manera:

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

No uses »

 url(r"^item/value/(?P\d+\.\d{1,2})$", views.show_item, name="show-item"), 

Solo coincidirá con los patrones de URL como /item/value/0.01 , /item/value/12.2 etc.

No coincidirá con los patrones de URL como /item/value/1.223 , /item/value/1.2679 etc.

Mejor es usar »

 url(r"^item/value/(?P\d+\.\d+)$", views.show_item, name="show-item"), 

/item/value/0.01 patrones de URL como /item/value/0.01 , /item/value/1.22 , /item/value/10.223 , /item/value/1.3 etc.

Finalmente puedes diseñar tus views.py algo como

Esto es solo por un ejemplo.

 # Make sure you have defined Item model (this is just an example) # You use your own model name from .models import Item def show_item(request, dollar): try: # Convert dollar(string) to dollar(float). # Which gets passed to show_item() if someone requests # URL patterns like /item/value/0.01, /item/value/1.22 etc. dollar = float(dollar); # Fetch item from Database using its dollar value # You may use your own strategy (it's mine) item = Item.objects.get(dollar=dollar); # Make sure you have show_item.html. # Pass item to show_item.html (Django pawered page) so that it could be # easily rendered using DTL (Django template language). return render(request, "show_item.html", {"item": item}); except: # Make sure you have error.html page (In case if there's an error) return render(request, "error.html", {});