Django从理论到实战(part16)--指定默认的参数

    技术2024-07-09  86

    学习笔记,仅供参考

    参考自: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参数可以控制页数,且第 k k k p n = ( k − 1 ) ∗ 50 pn=(k−1)∗50 pn=(k1)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模块中,使用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/发起请求,可以看到依然显示的是第一页:

    Processed: 0.014, SQL: 9