學習筆記,僅供參考
參考自:Django打造大型企業官網;
本系列Blog以應用爲主,理論基礎部分我在後端專欄的Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,儘量詳細的寫一下。
指定默認的參數
- 看一個示例
我們打開安徽財經大學的第一頁吧,其url爲:
https://tieba.baidu.com/f?kw=%B0%B2%BB%D5%B2%C6%BE%AD%B4%F3%D1%A7
可以看到,這個url中只有關於吧名的查詢參數kw。
我們再翻到第2頁,其URL爲:
https://tieba.baidu.com/f?kw=%E5%AE%89%E5%BE%BD%E8%B4%A2%E7%BB%8F%E5%A4%A7%E5%AD%A6&pn=50
可以看到,第2頁的url中多了一個查詢參數pn,它的參數值爲50。
我們再翻到第3頁,其URL爲:
https://tieba.baidu.com/f?kw=%E5%AE%89%E5%BE%BD%E8%B4%A2%E7%BB%8F%E5%A4%A7%E5%AD%A6&pn=100
好的,現在我們可以推斷的pn參數可以控制頁數,且第頁。
我們在瀏覽器中輸入URL:
https://tieba.baidu.com/f?kw=%E5%AE%89%E5%BE%BD%E8%B4%A2%E7%BB%8F%E5%A4%A7%E5%AD%A6&pn=0
發現果然跳轉到了第1頁。
我們發現,不輸入查詢參數pn與輸入pn=0返回的都是第1頁,這是怎麼做到的呢?
我們可以通過設置默認參數實現。
- 設置默認參數原理
在urls.py模塊中,使用path
或re_path
函數時,在route
參數中都可以包含參數,而有時候想指定默認的參數,這時候可以通過以下方式來完成。示例代碼如下:
from django.urls import path
from . import views
urlpatterns = [
path('blog/', views.page),
path('blog/page<int:num>/', views.page),
]
# View (in blog/views.py)
def page(request, num=1):
# Output the appropriate page of blog entries, according to num.
...
當在訪問blog/
的時候,因爲沒有傳遞num
參數,所以會匹配到第一個url,這時候就執行view.page
這個視圖函數,而在page
函數中,又有num=1
這個默認參數。因此這時候就可以不用傳遞參數。而如果訪問blog/1
的時候,因爲在傳遞參數的時候傳遞了num
,因此會匹配到第二個url
,這時候也會執行views.page
,然後把傳遞進來的參數傳給page
函數中的num
。
- 舉個例子
我們在主urls.py模塊下創建一個路由:
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.page),
path('page/<int:page_num>/', views.page),
]
在主views.py模塊下定義一個視圖函數:
def page(request, page_num = 1):
page_list = ["page1", "page2", "page3"]
num = page_num-1
return HttpResponse(page_list[num])
我們向http://127.0.0.1:8000/page/1/發起請求:
再向http://127.0.0.1:8000/發起請求,可以看到依然顯示的是第一頁: