python - Django请求GET参数值列表

标签 python django

我想做一些排序,我想要的是使用名为 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)

最佳答案

Django 允许在请求中发送多个 GET 参数,但发送它们的方式是错误的(不仅适用于 Django)
您请求的格式应为 ?order=-age&order=height
然后在 View 中您可以执行 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(我认为其他网络语言)要求 GET 列出参数命名为 param[] (例如 order[]),因此库就像 JQuery 一样命名您的 AJAX 请求参数。 在这种情况下,您必须在 View 中使用正确的名称,即 request.GET.getlist('order[]')

关于python - Django请求GET参数值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41823399/

相关文章:

python - 来自 python 的子进程模块无法运行 bash 命令,如 "<cmd1> | <cmd2>"

python - 如何用小时列融化 `pandas.DataFrame` 并将它们划分为 15 分钟间隔

python - 有没有办法在 opencv-python 中显示最后一帧?

python - Django 中的下拉搜索字段

python - 在 apache、mod_wsgi、debian 上部署 django 时出现奇怪的错误

mysql - Apache 与 Django 应用程序和 Matplotlib 挂起

Python:读取超过 1M 的小型 csv 文件并写入数据库

python - 测试 pandas DataFrame 的任何列是否满足条件

python - 如何在中间件中更新 Django HttpRequest 主体

python - 如何在动态Django模型中调用属性方法?