python-Django URL模式-字符串参数

具有数字参数的Django网址格式为:

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

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

rechie asked 2020-08-11T04:45:24Z
6个解决方案
41 votes

对于在url中具有字符串参数,您可以: 像这样的网址:

url(r'^polls/(?P<string>[\w\-]+)/$','polls.views.detail')

这甚至可以让子弹弦通过例如:字符串,例如node-js等。

Hiro answered 2020-08-11T04:45:56Z
34 votes

取决于您关心的字符。 就像文档所说的,\w将给您一个字母数字字符或下划线。

Ignacio Vazquez-Abrams answered 2020-08-11T04:45:31Z
14 votes

从Django 2.0开始,通过添加slug符号,可以更轻松地处理URL中的字符串参数,该符号的用法与urls.py中的int相同:

from django.urls import path

urlpatterns = [
    path('something/<slug:foo>', views.slug_test),
]

在基于函数或基于类的视图中,您将像处理其他任何参数一样处理它:

def slug_test(request, foo):
    return HttpResponse('Slug parameter is: ' + foo)
Andreas Bergström answered 2020-08-11T04:46:20Z
10 votes

在较新的Django版本(例如2.1)中,您可以使用

path('polls/<str:poll_id>', views.polls_detail)

如此处所示Django URL调度程序

def polls_detail(request,poll_id):
#process your request here
abhijeetgurle answered 2020-08-11T04:46:44Z
3 votes

从Django 2.0开始,已引入pathpath不会在网址中使用正则表达式,因此它是旧版url的简化版本

从2.0开始,您可以像下面这样使用path:

path('polls/<poll_id>', views.polls_detail)

不需要明确指定字符串路径参数,因为路径参数的默认数据类型是字符串本身。

参考:[https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0]

Binita Bharati answered 2020-08-11T04:47:18Z
1 votes

如果您使用的是Django版本> = 2.0,则只需执行以下操作即可。

from django.urls import path    

urlpatterns = [
    ...
    path('polls/<string>/$','polls.views.detail')
    ...
]

来源:[https://docs.djangoproject.com/zh-CN/2.0/ref/urls/#django.urls.path]

SuperNova answered 2020-08-11T04:47:42Z
translate from https://stackoverflow.com:/questions/11894916/django-url-pattern-string-parameter