具有数字参数的Django url模式是:
url(r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail')
如果我的poll_id不是数字而是字符串,那么正确的语法是什么?
答案 0 :(得分:36)
在url中有一个字符串参数,你可以: 这样的网址:
url(r'^polls/(?P<string>[\w\-]+)/$','polls.views.detail')
这甚至可以让slug弦通过 例如:像node-js等字符串。
答案 1 :(得分:34)
取决于您关心的角色。与the docs一样,\w
会为您提供字母数字字符或下划线。
答案 2 :(得分:13)
从Django 2.0开始,通过添加 slug 符号更容易处理URL中的字符串参数,该符号在 urls.py 中用作int:< / p>
from django.urls import path
urlpatterns = [
path('something/<slug:foo>', views.slug_test),
]
在基于函数或基于类的视图中,您可以像处理任何其他参数一样处理它:
def slug_test(request, foo):
return HttpResponse('Slug parameter is: ' + foo)
答案 3 :(得分:3)
在更高版本的Django(例如2.1)中,您可以使用
path('polls/<str:poll_id>', views.polls_detail)
def polls_detail(request,poll_id):
#process your request here
答案 4 :(得分:1)
如果你使用的是Django版本&gt; = 2.0,那么就像下面这样完成。
from django.urls import path
urlpatterns = [
...
path('polls/<string>/$','polls.views.detail')
...
]
来源:https://docs.djangoproject.com/en/2.0/ref/urls/#django.urls.path
答案 5 :(得分:1)
从Django 2.0开始,引入了path
。 path
不会在网址中使用正则表达式,因此它是旧版url
从2.0开始,您可以像下面这样使用path:
path('polls/<poll_id>', views.polls_detail)
不需要明确指定字符串路径参数,因为路径参数的默认数据类型是字符串本身。
Ref:https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0