Django從理論到實戰(part16)--指定默認的參數

學習筆記,僅供參考

參考自: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參數可以控制頁數,且第kkpn=(k1)50pn=(k−1)∗50

我們在瀏覽器中輸入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模塊中,使用pathre_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/發起請求,可以看到依然顯示的是第一頁:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章