Django 设置默认为空 url

Django set default empty url

我正在尝试学习 Django 并且正在学习 Corey Shafer 的教程 (https://www.youtube.com/watch?v=a48xeeo5Vnk),但是当我尝试创建两个不同的页面时,我会自动被定向到具有“空地址”的页面":

在他的:

/博客 /urls.py

看起来像这样:

from django.conf.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='blog-home'),
    path('about/', views.about, name='blog-about'),

]

当他转到 localhost:8000/blog/about 时,页面正确显示

当我试图模仿他的代码为blog/urls.py:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'', views.home, name='blog-home'),
    url(r'^about/', views.about, name='blog-about'),
]

localhost:8000/blog/about的结果是views.home的内容,而不是views.about。

当我写一个名字而不是一个空字符串时,以下工作正常:

urlpatterns = [
    url(r'^home', views.home, name='blog-home'), 
    url(r'^about/', views.about, name='blog-about'),

]

但我不明白为什么它在以前的版本中可以工作,为什么现在不能工作,以及如何解决它

A url 如果可以找到匹配的子字符串,则匹配,空字符串 r'' 因此匹配 每个 字符串。

您应该使用 anchors 来指定字符串的开始 (^) 和结束 ($):

urlpatterns = [
    #     ↓ ↓ anchors
    url(<b>r'^/$'</b>, views.home, name='blog-home'),
    url(r'^about/', views.about, name='blog-about'),
]

Note: As of , url(…) [Django-doc] is deprecated in favor of re_path(…) [Django-doc]. Furthermore a new syntax for paths has been introduced with path converters: you use path(…) [Django-doc] for that.