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/发起请求,可以看到依然显示的是第一页:

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