django 2.2.x及以后版本的路由分发(include)
今天在学django的时候,一开始直接在根目录的urls.py里面直接用了path()函数进行路由配置
from django.contrib import admin
from django.urls import path
from api import views
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', views.hello),
]
网页可以正常显示:
但是看着别人说路由分发更好用一点,于是按照别人的代码改了一下代码:
需要在自己的app目录下也创建一个urls.py进行路由分发的配置:
from api import views
from django.conf.urls import url
urlpatterns = [
path(r'hello/', views.hello),
]
但是报错:
from django.conf.urls import url
ImportError: cannot import name 'url' from 'django.conf.urls'
于是我开始到处搜资料,搜了很久,别人的代码都是这样写的,但是我的就是没有(我的是django 4.0),最后才看到,原来从django 2.2.x开始,url()就被删除了,于是我用了之前的path()函数:
from api import views
from django.urls import path
urlpatterns = [
path(r'hello/', views.hello),
]
终于不再报错了,然后我对照着我看的视频,把根目录的urls.py改了:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('api.urls')),
]
此时跑起来django没有报错,但是打开网页一看404了,一开始我以为是app目录下的urls.py用了path()函数导致的,但是一直不知道怎么改,直到我仔细看了网页的错误提示:
才发现原来是根目录下urls.py里面的path()函数不需要再加路径了,修改方式有两种:
- 一种是根目录urls.py的path()函数的第一个参数设置为空字符串:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('api.urls')),
]
- 另一种是在网页访问时加上’api/’,即可:
这些问题都挺无脑的,没这方面经验,所以被低级错误困扰了很久,希望大家不喜勿喷,欢迎大佬指正,也希望对大家有所帮助。