You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何为GET请求参数设置默认值?

问题原因

Django的QueryDict的get()方法的默认值仅在参数完全不存在于查询字符串中时生效。如果URL中存在参数名但未赋值(例如请求路径为/find-users?zipcode=&service=1),此时zipcode对应的取值是空字符串'',不属于键不存在的场景,因此不会触发默认值逻辑。

解决方案

你可以手动判断参数取值是否为空,为空时手动替换为默认值即可,两种常用写法如下:

写法1:显式判断(兼容性最好,无逻辑坑)

def find_users(request):
    # 处理邮编参数
    selected_zipcode = request.GET.get('zipcode')
    if not selected_zipcode:
        selected_zipcode = 75000
    # 处理服务参数
    selected_service = request.GET.get('service')
    if not selected_service:
        selected_service = 1
    # 统一转换为和数据库字段匹配的整型
    selected_zipcode = int(selected_zipcode)
    selected_service = int(selected_service)

    users = User.objects.filter(
        Q(zipcode=selected_zipcode),
        Q(proposals__pk=selected_service)
    )
    return render(
        request,
        'users.html', {
            # 原代码此处多写了冗余的users变量,且pet_sitters未定义,修正为查询得到的users即可
            'users': users,
        })

写法2:短路求值(适合默认值非零/非空的场景)

selected_zipcode = int(request.GET.get('zipcode') or 75000)
selected_service = int(request.GET.get('service') or 1)

注意:如果你的参数有效值包含0、空字符串这类布尔假值,不要使用短路求值写法,否则会误覆盖有效值

内容的提问来源于stack exchange,提问作者sbm54

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:39:03