django include()函數的理解


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM