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