Django处理同名url参数

  • 发布时间:2016年11月7日 16:52
  • 作者:杨仕航
  • 分类标签: Django
  • 阅读(7717)
  • 评论(1)

在对我的网站改版的时候发现这个问题:处理同名参数时,用get方法直接获取,只能获取到其中一个参数值。不能获取全部的参数值。

一般应用场景出现在表单有多个checkbox复选框的时候。同组的复选框可以设置同样的name属性值。

checkbox示例

我是用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:我的网站改版还在改版,博文列表部分改得差不多了。预览一下:

20161107/20161107164056041.png

我把分类标签用复选框显示,用于筛选,所以遇到这个url同名参数问题。该部分的功能实现了,还差排序处理。

这个排序我打算分3种排序:发布日期、阅读数、评论数。

发布日期是blog的字段,很容易处理。问题是阅读数和评论数排序。这两个都是使用了ContentType,数据来自其他表。较难统计,若您有什么好的排序方法,欢迎支招给我,谢谢^_^

上一篇:我的网站搭建(第33天) 页面改版:博文筛选

下一篇:Django集成UEditor (封装成应用)

评论列表

杨仕航

杨仕航

我打算还是用原始SQL查询的方法去处理了

2016-11-08 08:31 回复

新的评论

清空