什么是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中添加即可。