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

携带Base64编码图片重定向时出现No reverse Match错误

问题分析与解决方案

核心问题

  • 重定向本质是GET请求,但你的create_rider视图试图从request.POST中获取image参数,这完全拿不到数据
  • Base64编码的图片体积大,直接作为URL参数传递会触发URL长度限制,还可能因为特殊字符(如+、/、=)导致参数解析错误

解决方案

方案1:用Django Session暂存Base64图片(推荐)

把Base64图片存在用户session中,重定向后从session读取,避免URL传递的各种问题:

修改snap_rider视图:

@login_required
def snap_rider(request):
    if request.method == 'POST':
        image = request.POST['photo_data']
        
        # 计算图片字节大小
        image_size = len(image) * 3 / 4
        if image_size > 5 * 1024 * 1024:
            return render(request, 'rider_management/snap-rider.html', {'error_message': '图片过大,请选择更小的图片。'})
        
        search_request_data = {
            "images": [image],
            "min_score": 0.7,
            "search_mode": "FAST"  
        }
        
        response = requests.post(SEARCH_URL, json=search_request_data, headers=headers)
        if response.status_code == 200:
            data = response.json()
            if data == []:
                # 将Base64图片存入session
                request.session['rider_image'] = image
                return redirect('create_rider')
        else:
            print(f"错误: {response.status_code} - {response.text}")
 
    return render(request, 'rider_management/snap-rider.html')

修改create_rider视图:

@login_required
def create_rider(request):
    # 从session中获取图片
    image = request.session.get('rider_image')
    # 用完删除session中的数据,避免冗余
    if image:
        del request.session['rider_image']
    # 后续业务逻辑...

方案2:编码后作为GET参数传递(不推荐,仅适用于小图)

如果一定要用URL传递,需要对Base64字符串进行URL安全编码,同时修改视图从GET参数获取:

修改snap_rider中的重定向代码:

import urllib.parse

# ... 其他代码 ...
if data == []:
    # 对Base64字符串进行URL编码,避免特殊字符解析错误
    encoded_image = urllib.parse.quote(image)
    return redirect(f'create_rider?image={encoded_image}')

修改create_rider视图:

@login_required
def create_rider(request):
    # 从GET参数获取并解码
    encoded_image = request.GET.get('image')
    image = urllib.parse.unquote(encoded_image) if encoded_image else None
    # 后续业务逻辑...

注意:这种方式会导致URL异常冗长,且多数服务器对URL长度有限制(通常2KB-8KB),5MB的Base64图片远超过这个阈值,所以强烈优先使用方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:22:30