什么是django的include()函数?
引用官网教程第一部分的原话:"
函数 include()
允许引用其它 URLconfs。每当 Django 遇到 include()
时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。
我们设计 include()
的理念是使其可以即插即用。因为投票应用有它自己的 URLconf( polls/urls.py
),他们能够被放在 "/polls/" , "/fun_polls/" ,"/content/polls/",或者其他任何路径下,这个应用都能够正常工作。"
include()起到什么作用?
include()函数使得URLconfs的机制更加符合RESTful思想,使得网站中不同应用/界面都拥有自己的URLconfs,进而使得不同应用界面之间的继承关系相互独立,形成树状网页结构;同时解决的网页过多使得单一的URLconfs过于臃肿的问题,进一步降低耦合,提高内聚。
举个例子
编写一个小网站,使得
http://127.0.0.1:8000/显示“这是我的网站”;
http://127.0.0.1:8000/page/1显示“这是编号1网页。”;
http://127.0.0.1:8000/page/2显示“这是编号2网页。”。
(请求默认进入项目根目录同名目录下的pattern下)
不使用include()
mysite下urls:
from django.urls import path,include urlpatterns = [ path('', main.views,name='main'), path('page/1', page1.views,name='page_1'), path('page/2', page2.views,name='page_2'), ]
使用include()
项目结构:
注意,此时各个view目录下都存在一个urls文件作为URLconfs。
mysite下urls.py:
from django.urls import path,include urlpatterns = [ path('', include('main.urls')), ]
main下urls.py:
from django.urls import path,include from . import views urlpatterns = [ path('', views.main, name='main'), path('page/1', include('page1.urls')), path('page/2', include('page2.urls')), ]
page1下urls.py:
from django.urls import path from . import views urlpatterns = [ path('', views.page1,name="page_1"), ]
page2下urls.py:
from django.urls import path from . import views urlpatterns = [ path('', views.page2,name="page_2"), ]
有人或许会疑惑为啥使用了include看起来更加繁琐了?
当网页整体结构深度过高,比如主界面下有三个子界面,每个字界面各有5个子界面,一共16个界面的分发都写在一个urls中就会显得十分臃肿;
而使用inlcude函数就可以将子界面的urls写在子界面的目录下的新URLconfs中,这样就完成了瘦身,而且网站结构的扩增十分方便——在父界面的urls中添加即可。