10

我想在 Django URL 模式中使用带小数点的数字,但我不确定它是否真的可行(我不是正则表达式专家)。

这是我要用于 URL 的内容:

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

这些 URL 将显示价值 0.01 美元或 0.05 美元的项目。当然,我可以采取简单的方法并以美分为单位传递值,因此它将是 /item/value/1,但我希望在我的视图中接收参数作为十进制数据类型而不是整数(并且在某些时候我可能不得不处理一小部分)。是否可以在 Django URL 模式中编写一个正则表达式来处理这个问题?

4

4 回答 4

18

它可以是类似的东西

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:
        ...
于 2009-07-15T00:08:58.173 回答
14

我不具体了解 Django,但这应该与 URL 匹配:

r"^/item/value/(\d+\.\d+)$"
于 2009-07-14T23:49:23.860 回答
3

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

r"^/item/value/(\d\.\d{2})$"
于 2009-07-15T07:25:44.240 回答
1

不要使用 »

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", {});
于 2018-05-06T11:19:53.853 回答