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

Django重定向带query string报错,如何修改URL模式?

解决Django重定向带Query String的报错问题

问题原因

你当前的写法return redirect('search/?print_id='+str(pk))错误地把包含Query String的完整字符串当成了视图的name参数,Django会去urls里找名为search/?print_id=36的视图模式,自然找不到,所以报错。

解决方案:无需修改URL模式

Query String不属于URL路径的一部分,不需要在urls.py的path中定义,直接通过以下方式生成正确的重定向URL即可:

方式1:手动拼接基础URL与Query String

先通过reverse获取视图的基础URL,再拼接Query参数:

from django.urls import reverse

def your_view(request, pk):
    # 获取search视图的基础URL
    base_url = reverse('search')
    # 拼接Query String
    redirect_url = f"{base_url}?print_id={str(pk)}"
    return redirect(redirect_url)

方式2:用QueryDict处理参数(更优雅,避免编码问题)

如果有多个Query参数,推荐用QueryDict来处理,自动处理编码:

from django.urls import reverse
from django.http import QueryDict

def your_view(request, pk):
    query_params = QueryDict(mutable=True)
    query_params['print_id'] = str(pk)
    # 可添加更多参数,比如query_params['keyword'] = 'test'
    base_url = reverse('search')
    redirect_url = f"{base_url}?{query_params.urlencode()}"
    return redirect(redirect_url)

在视图中获取Query参数

在search视图里,直接通过request.GET获取参数即可:

def search(request):
    print_id = request.GET.get('print_id')  # 获取print_id的值,不存在则返回None
    # 后续业务逻辑

原URL模式保持不变

你的urls.py中的定义无需修改:

path('search/', views.search, name='search'),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:50:24