2009-07-14 2 views
5

Я хотел бы использовать число с десятичной точкой в ​​шаблоне URL-адреса Django, но я не уверен, действительно ли это возможно (я не эксперт по регулярному выражению).Как использовать десятичное число в шаблоне URL Django?

Вот что я хочу использовать для URL-адресов:

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

Эти адреса будут показывать предметы стоимостью в $ 0,01 или $ 0,05. Конечно, я мог бы сделать простой выход и передать значение в центах, чтобы оно было/item/value/1, но я хотел бы получить аргумент в моем представлении как десятичный тип данных, а не как целое число (и Возможно, мне придется иметь дело с долями процента в какой-то момент). Можно ли написать регулярное выражение в шаблоне URL-адреса Django, который будет обрабатывать это?

ответ

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' (' except ValueError: ') –

13

Я не знаю, о Django конкретно, но это должно соответствовать URL:

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

Если вы хотите иметь ints и float в * one * url, напишите что-нибудь вроде этого: 'r '^/item/value/(\ d + (?: \. \ d +)) $" ' – Boldewyn

+0

+1 для получения более общего ответа (не ограничиваясь этим) числа с двумя цифрами после десятичного числа) – btk

+0

Решение @Boldewyn Ur не работает. Ни для ints, ни для floats ... я пытался использовать его, но безрезультатно –

3

Если значения будут приняты только $ 0,01 или $ 0,05, шаблон в Harto может быть определен следующим образом:

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

Спасибо, каждое сообщение добавило маленький кусочек головоломки. У Евгения была волшебная пуля. –