參考——現在有個問題是:
??如果我們專案做的很大,一個專案里有數十個app,總共成百上千個路由,難道我們全都寫在一個主路由urls.py檔案里么!看著不舒服,管理也很難受啊!!!????這就引出了本文的內容——子路由的使用(配合include()函式使用!)
1.include的作用:
- 一個project有一個主路由urls.py(只用來分配!)
- 各個app也建立自己的urls.py(但是瀏覽器中訪問url的時候最先訪問的仍是主路由對應的urls.py檔案)
- 所以用include()函式在主路由對應的urls.py檔案中進行注冊/分配!
1.1Django中實戰使用:
(1)專案目錄下的主urls.py檔案:
from django.contrib import admin
from django.urls import path,include #使用include要匯入
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('music/',include('music.urls')), #第一個引數是app的路徑
]
(2)App music里面的urls.py檔案:
from django.urls import path
from . import views
urlpatterns = [ # 子路由
path('sing/',views.sing),
]
(3)App music里面的views.py檔案:
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def sing(request):
return HttpResponse('讓我們一起搖擺!!')
(4)本地瀏覽器問:127.0.0.1:8000/music/sing,即可得到正確視圖!
2.拓展:path()中的引數kwargs
- Kwargs為字典型別;
- 可以傳遞額外的引數到對應的視圖函式中;
- 使用include的時候,需要統一給下面的url一些引數的時候
- 顯得尤其有用!
2.1Django中實戰使用:
(1)App music里面的urls.py檔案:
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [ #子路由
#傳遞一個Python 字典作為額外的引數給對應的視圖函式,
path("sing/",views.sing,{"name":"小明","age":18}), #對應的路徑可以給對應的視圖傳值
]
(2)App music里面的views.py檔案:
from django.shortcuts import render
from django.http import HttpResponse
import time
# Create your views here.
#音樂app下面的視圖函式
def sing(request,**kwargs): #**表示接受字典型資料
print(kwargs) #輸出:{"name":"小明"}
print(kwargs.get("name")) #輸出:小明
name=kwargs.get("name")
age=kwargs.get("age")
return HttpResponse("{}太帥了,年齡是{}".format(name,age)) #輸出:小明太帥了,年齡是18
(3)本地瀏覽器訪問:127.0.0.1:8000/music/sing會在網頁顯示正確的資料,而且在pycharm終端中會輸出列印的值!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/295658.html
標籤:python
