Django请求GET参数值列表

2024-04-11

我想做一些排序,我想要的是使用名为 ordering 的参数执行 GET 请求,如下所示,该值将是我将用于排序的模型属性,如下所示:

?order=['-age', 'height']

问题是当我尝试接收订单参数时。该值是一个列表。

我尝试像这样使用 as:

if 'order' in request.GET:
        import ast
        order = ast.literal_eval(request.GET.get('order'))
        queryset = queryset.order_by(*order)

有效。但是,我想避免使用 ast 库,还有其他方法吗?

UPDATE

我的参数是这样的:

?顺序=-年龄,身高

就像这样在 python 中使用 split :

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

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)

P.S虽然 django 允许 GET 参数被命名为任何名称,但 PHP(我认为其他 Web 语言)要求 GET 列表参数被命名为 param[] (例如 order[]),因此像 JQuery 这样的库将您的 AJAX 请求参数命名为这样。 在这种情况下,您必须在视图中使用正确的名称,即request.GET.getlist('order[]')

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django请求GET参数值列表 的相关文章

随机推荐