Django请求GET参数值列表
Posted
技术标签:
【中文标题】Django请求GET参数值列表【英文标题】:Django request GET parameter value list 【发布时间】:2017-06-08 23:15:43 【问题描述】:我想做一些排序,我想到的是用一个名为 ordering 的参数做一个 GET 请求,值将是我将用来排序的模型属性:
?order=['-age', 'height']
问题是当我尝试接收订单参数时。该值是一个列表。
我尝试像这样使用 ast:
if 'order' in request.GET:
import ast
order = ast.literal_eval(request.GET.get('order'))
queryset = queryset.order_by(*order)
成功了。但是,我想避免使用 ast 库,还有其他方法吗?
更新
我的参数是这样的:
?order=-年龄,身高
并且只是在 python 中这样使用 split:
if 'order' in request.GET:
order = request.GET.get('order').split(',')
queryset = queryset.order_by(*order)
【问题讨论】:
你的意思是.GET.getlist
?
Handling Django request.GET and multiple variables for the same parameter name的可能重复
@Sayse,这是我使用 getlist 时的输出.. [u'[-bet_amount,settlement_amount[']
您用于查询参数的语法不正确 - ?order=-age&order=height
@Sayse,我有关于这个问题的最新消息。请检查这是否是个好主意
【参考方案1】:
Django 允许在一个请求中发送多个 GET 参数,但是您发送它们的方式是错误的(不仅适用于 Django)
您的请求应采用 ?order=-age&order=height
的形式
然后在视图中可以做order_list = request.GET.getlist('order')
您不需要检查键 'order' 是否在 GET 参数中,因为如果未找到键,.getlist()
返回一个空列表...
如果您只想要列表中的第一项,您可以使用request.GET.get('order')
,如果密钥不存在,则返回 None。
最终代码:
order_list = request.GET.getlist('order')
queryset = queryset.order_by(*order_list)
PS 虽然 django 允许将 GET 参数命名为任何名称,但 php(我认为其他 Web 语言)需要将 GET 列表参数命名为 param[](例如 order[]),因此库像 JQuery 这样命名您的 AJAX 请求参数。
在这种情况下,您必须在视图中使用正确的名称,即 request.GET.getlist('order[]')
【讨论】:
感谢您的解释!非常感谢!以上是关于Django请求GET参数值列表的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Ajax GET 调用中的数据值检索到 Django 视图中