53

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

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

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

4

7 回答 7

52

对于在 url 中有一个字符串参数,你可以有: url 像这样:

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

这甚至会允许 slug 字符串传递,例如:像 node-js 这样的字符串。

于 2016-04-10T10:07:30.673 回答
45

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

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

如此处给出的Django URL 调度程序

def polls_detail(request,poll_id):
#process your request here
于 2018-11-19T01:16:29.577 回答
35

取决于你关心的角色。就像文档说的那样,\w会给你一个字母数字字符或下划线。

于 2012-08-10T03:15:52.163 回答
19

从 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)
于 2018-04-11T15:22:29.177 回答
9

从 Django 2.0 开始,path已经引入。path在 url 中不使用 reg ex,因此它是旧版本的简化版本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

于 2019-01-09T18:57:40.413 回答
1

如果您使用的 Django 版本 >= 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

于 2018-02-15T02:38:49.773 回答
0

如果您的尖括号参数是路径,即包含“/”,则必须使用path:.

例子:
path('section/<path:some_path>,app.views.some_view,name='some_name')

来源:https ://docs.djangoproject.com/en/4.0/topics/http/urls/#path-converters

(已编辑)
“str - 匹配任何非空字符串,不包括路径分隔符“/”。如果表达式中不包含转换器,则这是默认值。

slug - 匹配任何由 ASCII 字母或数字以及连字符和下划线字符组成的 slug 字符串。例如,build-your-1st-django-site。

path - 匹配任何非空字符串,包括路径分隔符“/”。这允许您匹配完整的 URL 路径,而不是像 str 那样匹配 URL 路径的一部分。”

于 2022-01-19T22:20:56.680 回答