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 视图中

Django回顾--获取请求参数的几种方式

如何向 GET 请求发送巨大的参数列表

django-视图

Django 动态过滤 ListView 返回错误:get() 为参数“self”获取了多个值

django 获取post传递的json数据