1. 程式人生 > >4.6、Django - URL之URL分層模組化

4.6、Django - URL之URL分層模組化

1、URL分層模組化

當網頁中內容較多,將網頁中的URL全部寫在一個檔案中,必然不好管理 。

預設的APP下是不含url.py 檔案(如下圖douAPP專案下的APP為douBook的內容) ,可以通過在每個APP下構建url.py 檔案 ,解決URL分層模組化管理。

在這裡插入圖片描述

2、示例

在douAPI專案APP為douBook的views.py中:

from django.shortcuts import render

# Create your views here.
#
from django.http import HttpResponse

def book_info
(request): return HttpResponse("圖書詳情") def book_info_detail(request,book_id): # 從資料庫中拿book_id,省略 your_book_id = 'your book id is :{book_id}'.format(book_id = book_id) return HttpResponse(your_book_id) # 注意book_author_detail函式與book_info_detail(request,book_id)的區別,前者的除了request引數寫在括號內,其餘不寫,在函式體內部體現
def book_author_detail(request): # 從資料庫中拿id author_id = request.GET.get('id') # 或者author_id = request.GET['id'] content = "Author's id of the book is : {input_id}".format(input_id = author_id) return HttpResponse(content) def book_publisher_id(request,publisher_id): content = "Publisher's id of the book is : {input_id}"
.format(input_id = publisher_id) return HttpResponse(content)

在專案douAPI下的url.py中:

from django.urls import path,include
from douBook import views
from django.urls import converters

urlpatterns = [
    # include中的路徑是相對於專案所在的目錄
    path('douBook/', include('douBook.urls')),# 將douBook開頭的連結轉到APP為douBook的urls.py匹配
]

在專案douAPI下的APP為douBook的APP下的url.py中:

from django.urls import path
from douBook import views
from django.urls import converters

urlpatterns = [
    path('', views.book_info),
    path('detail/<book_id>/', views.book_info_detail),
    path('author/', views.book_author_detail),
    path('publisher/<publisher_id>/', views.book_publisher_id),


]

結果如下:
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

3、總結

1、url模組化是為了方便管理,即將每個APP中各建立自己的urls.py檔案 。
2、在專案下有一個總的urls.py檔案,這個檔案的主要作用是將每個APP去找各自的urls.py檔案,在該檔案中,應該使用include函式包含urls.py,且是相對於專案路徑 。
3、在APP中的urls.py檔案,所有的匹配也應該放在urlpatterns中 。
4、最終的url是根據主url.py和APP的url.py進行拼接的,因此,不可多加或少加/