URL 正则表达式将匹配 /x/y,但也只匹配 /x



>我正在学习教程,并收到一个 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())

相关内容

  • 没有找到相关文章

最新更新