Django url模式 - 字符串参数

时间:2012-08-10 03:04:49

标签: python regex django

具有数字参数的Django url模式是:

url(r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail')

如果我的poll_id不是数字而是字符串,那么正确的语法是什么?

6 个答案:

答案 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)

此处Django URL dispatcher

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开始,引入了pathpath不会在网址中使用正则表达式,因此它是旧版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