如何使用十进制数在Django URL模式?(How Do I Use A Decimal Numb

2019-06-25 23:33发布

我想使用一些与Django的URL模式的小数点,但我不知道是否它实际上可能(我不是一个正则表达式的专家)。

这是我想使用的网址是什么:

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

这些URL会显示价值为$ 0.01或$ 0.05物品。 当然,我可以采取简单的办法,并通过在美分值,因此这将是/项目/价值/ 1,但我希望收到的说法在我看来,作为一个十进制数据类型,而不是作为一个整数(和我可能会在某个时候处理一分钱的分数)。 是否可以写,将处理这个Django的URL模式的正则表达式?

Answer 1:

它可以是这样的

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:
        ...


Answer 2:

我不知道Django的明确,但这应该匹配的网址:

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


Answer 3:

如果要接受值仅为0.01 $或者$ 0.05时,harto的模式可以这样指定:

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


Answer 4:

不要使用»

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", {});


文章来源: How Do I Use A Decimal Number In A Django URL Pattern?