学习笔记,仅供参考
参考自: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=(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模块中,使用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/发起请求,可以看到依然显示的是第一页: