一个完整的路由包含:路由地址、视图函数(或者视图类)、路由变量和路由命名。其中基本的信息必须有:路由地址和视图函数(或者视图类),路由地址即我们常说的网址;视图函数(或者视图类)即项目应用(App)的views.py文件所定义的函数或类;路由变量和路由命名是由路由的变量和命名设置,使路由具有动态变化和命名引用功能。(动态变化是指一个路由地址按照某个规律演变多种不同的路由地址;命名引用是指在视图、模型等其他项目文件使用路由命名生成相应的路由地址)
默认情况下,设置路由地址是在项目同名的文件夹的urls.py文件里实现,这也是由setting.py的ROOT_URLCONF决定,以项目babies为例,如图1-2-1.
图1 -2-1
一个项目中可能有多个项目应用(App),而babies文件夹的urls.py是定义项目所有路由地址的总入口,如果项目中所有路由地址都在babies文件夹的urls.py中定义,当项目功能规模越来越大的时候,babies文件夹的urls.py定义 的路由地址就会越来越多,从而造成难以管理的问题。
为了更好的区分各个项目应用(App)的路由地址,我们在babies文件夹的urls.py中分别为每个项目应用(App)定义一条路由入口。首先在每个项目应用(App)的文件夹里创建urls.py文件,以项目babies的项目应用index为例,其目录结构如图1-2-2
图1-2-2
除了项目应用index之外,我们还需要在其他 应用中分别 创建新的urls.py文件。然后在PyCharm里打开babies文件夹的urs.py文件,将项目应用index、shopper和commodity新建的urls.py添加到babies文件夹的urls,py,添加方法由Django内置函数path和include实现,详细代码如下:
#babies文件夹的urls.py
from django.contrib import admin
from django.urls import path, include, re_path
from django.conf import settings
from django.views.static import serve
urlpatterns = [
path('admin/', admin.site.urls),
#添加项目应用index、commodity和shopper的子路由(urls.py)
path('index', include(('index.urls', 'index'), namespace='index')),
path('commodity', include(('commodity.urls', 'commodity'), namespace='commodity')),
path('shopper', include(('shopper.urls', 'shopper'), namespace='shopper')),
#配置媒体资源路由信息
re_path('media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT},name='media')
]