我想使用一些与Django的URL模式的小数点,但我不知道是否它实际上可能(我不是一个正则表达式的专家)。
这是我想使用的网址是什么:
/item/value/0.01
/item/value/0.05
这些URL会显示价值为$ 0.01或$ 0.05物品。 当然,我可以采取简单的办法,并通过在美分值,因此这将是/项目/价值/ 1,但我希望收到的说法在我看来,作为一个十进制数据类型,而不是作为一个整数(和我可能会在某个时候处理一分钱的分数)。 是否可以写,将处理这个Django的URL模式的正则表达式?
它可以是这样的
urlpatterns = patterns('',
(r'^item/value/(?P<value>\d+\.\d{2})/$', 'myapp.views.byvalue'),
... more urls
)
网址不应以斜线开始。
在视图中,你可以拥有的功能:
def byvalue(request,value='0.99'):
try:
value = float(value)
except:
...
我不知道Django的明确,但这应该匹配的网址:
r"^/item/value/(\d+\.\d+)$"
如果要接受值仅为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
等。
它不会匹配URL模式,比如/item/value/1.223
, /item/value/1.2679
等。
更好的方法是使用»
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
等。
最后,你可以设计自己的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", {});