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

如何在Django的QueryDict中避免查询参数内的加号被转义消失?

问题根因

  • QueryDict默认遵循application/x-www-form-urlencoded规范解析查询字符串,该规范明确定义+对应空格,所以直接传入test=1+1时,值里的+会被替换为空格。
  • 你对整段查询字符串执行quote_plus的写法是错误的:该操作把键值分隔符=也编码为了%3D,QueryDict无法识别到键值对分隔规则,因此会把解码后的整段内容作为键,对应值为空。

解决方案

场景1:期望得到{'test': ['1+1']}(大概率是你实际需要的效果,原期望输出存在笔误)

只需要提前把原始查询字符串里的所有+替换为URL编码格式的%2B,再传入QueryDict即可:

from django.http import QueryDict

my_non_safe_string = "test=1+1"
processed_str = my_non_safe_string.replace('+', '%2B')
result = QueryDict(processed_str)
print(result)
# 输出: <QueryDict: {'test': ['1+1']}>

场景2:确实需要得到你写的期望输出{'test=1+1': ['1+1']}

需要分别对键、值做URL编码后再拼接成查询字符串,不要对整段串编码:

from urllib.parse import quote_plus
from django.http import QueryDict

key = "test=1+1"
value = "1+1"
query_str = f"{quote_plus(key)}={quote_plus(value)}"
result = QueryDict(query_str)
print(result)
# 输出: <QueryDict: {'test=1+1': ['1+1']}>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:54:03