关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
在对我的网站改版的时候发现这个问题:处理同名参数时,用get方法直接获取,只能获取到其中一个参数值。不能获取全部的参数值。
一般应用场景出现在表单有多个checkbox复选框的时候。同组的复选框可以设置同样的name属性值。
我是用GET方式提交请求,url参数部分是?tag=1&tag=2。有两个tag参数。
提交到views.py文件处理请求,若用如下代码获取参数:
def test(request): tags = request.GET.get('tag') #...其不相关代码省略不显示
获取到的是其中1个值,而不是两个复选框的value值都获取到。
那么是否只提交了1个值呢?这里可以直接输出 str(request.GET)到页面看看,结果为<QueryDict: {u'tag': [u'1', u'2']}>
从结果看,确实两个checkbox复选框的value都提交了。很可能是使用的方法不准确。
用dir方法查看request.GET有什么属性和方法,发现其中一个方法:getlist。
该方法是可以获取参数中的列表,即同名参数返回列表。
修改代码:
def test(request): tags = request.GET.getlist('tag') #...其不相关代码省略不显示
经测试,该方法可以获取url同名参数全部的值,返回的数据是list类型。
另外,POST请求也同样有getlist方法。
ps:我的网站改版还在改版,博文列表部分改得差不多了。预览一下:
我把分类标签用复选框显示,用于筛选,所以遇到这个url同名参数问题。该部分的功能实现了,还差排序处理。
这个排序我打算分3种排序:发布日期、阅读数、评论数。
发布日期是blog的字段,很容易处理。问题是阅读数和评论数排序。这两个都是使用了ContentType,数据来自其他表。较难统计,若您有什么好的排序方法,欢迎支招给我,谢谢^_^
杨仕航
我打算还是用原始SQL查询的方法去处理了
2016-11-08 08:31 回复