如何在 Django 中定义可选的查询参数?

Posted

技术标签:

【中文标题】如何在 Django 中定义可选的查询参数?【英文标题】:How to define optional query parameters in Django? 【发布时间】:2021-06-08 07:44:38 【问题描述】:

这里我有一个端点来接收多个查询参数,即first_namelast_namelocation 我需要端点能够处理以下场景

所有 3 个参数的 1 个参数 2 个参数的

我找到了this,但在提供一个查询参数时我仍然得到404,只有在给定所有参数时才有效。

urls.py

re_path(r'^project_config/(?P<product>\w+|)/(?P<project_id>\w+|)/(?P<project_name>\w+|)/$',
            views.results, name='config')

然后查看

    def results(request, product, project_id, project_name):
        response = "You're looking at the results of question %s."
        print(product)
        print(project_name)
        return HttpResponse(response % project_id)

如何让url接受可选的查询参数?

【问题讨论】:

使用 GET 参数而不是将它们放在 url 中不是更好吗? 这会帮助你***.com/a/14351174/5600452 如果参数的数量是动态的,那么使用 querystring 通常会更好。 参数不是完全动态的,是三个的组合 谢谢.....所有 【参考方案1】:

正如 cmets 中提到的,使用查询参数试试这个

网址

re_path(r'^project_config/',views.results, name='config')

# http://127.0.0.1:8000/project_config/?product=1&project_id=2&project_name=foo

观看次数

def results(request):
    
    queryprms = request.GET
    product = queryprms.get('product')
    project_id = queryprms.get('project_id')
    project_name = queryprms.get('project_name')
    
    response = "You're looking at the results of question %s."
    
    # set your combination
    if product and project_id and project_name:
        # do some thing
    if product and project_id:
        # do some thing
    
    # so on

    return HttpResponse(response % project_id)

【讨论】:

以上是关于如何在 Django 中定义可选的查询参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 django 中的 FileField 成为可选的?

对如何使 Django 模型字段可选的感到困惑

如何使 django 中的 FileField 成为可选的?

如何在 NestjS 中使用可选的 url 参数

如何在 Node.js server.listen() 中使用可选的主机名参数

django - 可选 url 参数的正则表达式