>我正在学习教程,并收到一个 404 错误 http://127.0.0.1:8000/restaurants/不匹配
url(r'^restaurants/(?P<slug>w+)/$', RestaurantListView.as_view())
而 http://127.0.0.1:8000/restaurants/x 与任何 x 是。我应该如何重写路径以匹配 url 而无需任何额外的/x?
。 错误信息:
Using the URLconf defined in projekt.urls, Django tried these URL patterns, in this order:
admin/
^contact/$
^$
^about/$
^restaurants/(?P<slug>w+)/$
The current path, restaurants/, didn't match any of these.
您的正则表达式在输入开始时restaurants/
匹配,然后将任何 1+ 单词字符捕获到一组"slug"中,然后在字符串末尾要求并匹配/
($
是字符串锚点的末尾。
您需要使用可选的非捕获组包装可选部件:
r'^restaurants/(?:(?P<slug>w+)/)?$'
^^^ ^^
正则表达式匹配:
^
- 输入开始restaurants/
- 文本restaurants/
子字符串(?:
- 非捕获组匹配的开始...(?P<slug>w+)
- 1+ 个单词字符捕获到slug
组中/
-/
炭
)?
- ...非捕获组结束匹配 1 或 0 次$
- 输入结束。
In django 2
path('restuarants/',RestaurantListView.as_view())
在姜戈1中
url(r'^restaurants/$', RestaurantListView.as_view())