Django请求GET参数值列表

时间:2017-01-24 08:31:30

标签: python django

我想做一些排序,我想要的是用一个名为ordered的参数做一个GET请求,这个值将是我将用来排序的模型atttribute:

?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库,还有其他方法吗?

更新

我做了这样的参数:

?顺序= -age,高度

就像在python中使用split一样:

if 'order' in request.GET:
    order = request.GET.get('order').split(',')
    queryset = queryset.order_by(*order)

1 个答案:

答案 0 :(得分: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请求params。 在这种情况下,您必须在视图中使用正确的名称,即request.GET.getlist('order[]')