我想在Django URL模式中使用带小数点的数字,但我不确定它是否真的可行(我不是正则表达式专家)。
以下是我要用于网址的内容:
/item/value/0.01
/item/value/0.05
这些网址会显示价值0.01美元或0.05美元的商品。当然,我可以采取简单的方法,并以美分传递值,因此它将是/ item / value / 1,但我希望在我的视图中接收作为十进制数据类型而不是整数的参数(和我可能不得不在某个时候处理一小部分分数)。是否可以在Django URL模式中编写一个可以处理此问题的正则表达式?
答案 0 :(得分:16)
可能类似
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:
...
答案 1 :(得分:14)
我不是特别了解Django,但这应该与URL匹配:
r"^/item/value/(\d+\.\d+)$"
答案 2 :(得分:3)
如果要接受的值仅为0.01美元或0.05美元,则可以像这样指定harto的模式:
r"^/item/value/(\d\.\d{2})$"
答案 3 :(得分:0)
url(r"^item/value/(?P<dollar>\d+\.\d{1,2})$", views.show_item, name="show-item"),
它只会匹配网址格式,例如
/item/value/0.01
,/item/value/12.2
等。与
/item/value/1.223
,/item/value/1.2679
等网址格式不匹配。
url(r"^item/value/(?P<dollar>\d+\.\d+)$", views.show_item, name="show-item"),
它会匹配网址格式,例如
/item/value/0.01
,/item/value/1.22
,/item/value/10.223
,/item/value/1.3
等。
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", {});