regex Django url模式-字符串参数

xxhby3vn  于 2022-12-24  发布在  Go
关注(0)|答案(8)|浏览(158)

Django的url模式有一个数字参数:

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

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

jmo0nnb3

jmo0nnb31#

为了在url中有一个字符串参数,你可以有:网址如下:

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

这甚至会允许段塞串通过,例如:node-js等串。

2izufjch

2izufjch2#

在较新版本的Django2.1中,您可以使用

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

这里给出Django URL dispatcher

def polls_detail(request,poll_id):
#process your request here
euoag5mw

euoag5mw3#

这取决于你关心什么字符。就像the docs说的,\w会给予你一个字母数字字符或下划线。

aamkag61

aamkag614#

从Django 2.0开始,通过添加 slug 符号,可以更容易地处理URL中的字符串参数,它的用法就像int在urls.py中的用法一样:

from django.urls import path

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

在基于函数或基于类的视图中,可以像处理其他参数一样处理它:

def slug_test(request, foo):
    return HttpResponse('Slug parameter is: ' + foo)
dfddblmv

dfddblmv5#

从Django2.0开始,path被引入。path在url中不接受reg ex,因此它是旧版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

dced5bon

dced5bon6#

如果你使用的Django版本〉= 2.0,那么就像下面这样简单地完成。

from django.urls import path    

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

Source: https://docs.djangoproject.com/en/2.0/ref/urls/#django.urls.path

7kqas0il

7kqas0il7#

如果你的尖括号参数是一个路径,即包含"/",你必须使用path:
示例:
path('section/<path:some_path>,app.views.some_view,name='some_name')
Source: https://docs.djangoproject.com/en/4.0/topics/http/urls/#path-converters
(编辑)
"str-匹配任何非空字符串,不包括路径分隔符"/"。如果表达式中不包含转换器,则这是默认值。
匹配任何由ASCII字母或数字加上连字符和下划线字符组成的slug字符串。例如,building-your-1st-django-site。
path-匹配任何非空字符串,包括路径分隔符"/"。这使您可以匹配完整的URL路径,而不是像str那样匹配URL路径的一段。

pprl5pva

pprl5pva8#

这取决于你关心什么字符。就像文档中说的,\w会给予你一个字母数字字符或下划线。

相关问题