Как использовать десятичное число в шаблоне URL Django?
Я хотел бы использовать число с десятичной запятой в шаблоне URL Django, но я не уверен, что это действительно возможно (я не эксперт по регулярным выражениям).
вот, что я хочу использовать для URL-адреса:
/item/value/0.01
/item/value/0.05
эти URL-адреса будут показывать элементы стоимостью $ 0.01 или $ 0.05. Конечно, я мог бы взять простой выход и передать значение в центах, чтобы это было /item/value / 1, но я хотел бы получить аргумент в моем представлении как десятичный тип данных, а не как целое число (и у меня может быть чтобы иметь дело с долями цента в какой-то момент). Можно ли написать регулярное выражение в шаблоне URL-адреса Django, который будет обрабатывать это?
4 ответов
Это может быть что-то вроде
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.01 или $ 0.05, шаблон harto может быть указан следующим образом:
r"^/item/value/(\d\.\d{2})$"
не использовать "
url(r"^item/value/(?P<dollar>\d+\.\d{1,2})$", views.show_item, name="show-item"),
он будет соответствовать только шаблоны URL как
/item/value/0.01
,/item/value/12.2
etc.это не будет соответствовать шаблоны URL как
/item/value/1.223
,/item/value/1.2679
etc.
лучше использовать "
url(r"^item/value/(?P<dollar>\d+\.\d+)$", views.show_item, name="show-item"),
он будет соответствовать шаблоны URL как
/item/value/0.01
,/item/value/1.22
,/item/value/10.223
,/item/value/1.3
etc.
наконец, вы можете создать свой views.py
что-то вроде
это только для примера.
# 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", {});