use*_*189 9 python regex django-urls
我是Python和Django的新手.我将URLPattern添加到urls.py中,如下所示:
url(r'^address_edit/(\d)/$', views.address_edit, name = "address_edit"),
Run Code Online (Sandbox Code Playgroud)
我希望我的url接受一个具有可变长度的整数参数,例如0,100,1000,99999,用于db表的"id".但是我发现我只接受上述模式中的一位数字.如果我传递的整数不是1位数(例如999999),则显示错误
Reverse for 'address_edit' with arguments '(9999999,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['address_book/address_edit/(\\d)/$']
Run Code Online (Sandbox Code Playgroud)
如何构建URL模式,让程序接受来自URL的任意数量的整数?
the*_*eye 23
RegEx应该有+
修饰符,就像这样
^address_edit/(\d+)/$
Run Code Online (Sandbox Code Playgroud)
'+'
使得到的RE匹配前一个RE的1次或更多次重复.
ab+
将匹配a
后跟任何非零数量的b
s; 它不会匹配a
.
\d
将匹配任何数字(0-9
).但它只会匹配一次.要匹配两次,你可以这样做\d\d
.但随着要接受的位数增加,您需要增加\d
s 的数量.但RegEx有一种更简单的方法.如果您知道要接受的位数,那么您可以这样做
\d{3}
Run Code Online (Sandbox Code Playgroud)
这将接受三个连续的数字.如果您想接受3到5位数怎么办?RegEx涵盖了这一点.
\d{3,5}
Run Code Online (Sandbox Code Playgroud)
简单,对吧?:)现在,它只接受3到5个数字(注意:任何小于3的数字也不会匹配).现在,您要确保最少1个数字,但最大可以是任何数字.你会怎么做?只需将范围保持开放,就像这样
\d{3,}
Run Code Online (Sandbox Code Playgroud)
现在,RegEx引擎将匹配最少3位数,最大值可以是任意数字.如果你想匹配最小的一位数,最大可以是任何数字,那么你会做什么
\d{1,}
Run Code Online (Sandbox Code Playgroud)
正确:)即使这样也行.但是我们有一个速记符号来做同样的事情+
.如文档中所述,它将匹配任何非零数字.
Sup*_*ova 14
在Django> = 2.0版本中,这是以更清洁和更简单的方式完成的,如下所示.
from django.urls import path
from . import views
urlpatterns = [
...
path('address_edit/<int:id>/', views.address_edit, name = "address_edit"),
...
]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23857 次 |
最近记录: |