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