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

Django中传递字符串类型ID至URL的问题及求助

问题解决:Django主键含斜杠导致URL反向解析失败

问题根源

Django默认的str路径转换器(<str:qcp_id>)只会匹配**不含斜杠/**的字符串,而你的主键值是QCP/0001,包含斜杠,导致反向解析时无法匹配路由规则,触发找不到路径的错误。


解决方案

方案1:使用正则路由匹配含斜杠的主键

将原path路由替换为re_path,用正则表达式匹配包含斜杠的主键:

from django.urls import re_path

# 通用匹配(可匹配任意含斜杠的字符串)
re_path(r'^Quality/QualityControlPoint/(?P<qcp_id>.*)$', views.QualityControlPointView.as_view(), name='quality_control_point_view')

# 精确匹配(针对你示例的QCP/数字格式,更安全)
re_path(r'^Quality/QualityControlPoint/(QCP/\d+)$', views.QualityControlPointView.as_view(), name='quality_control_point_view')
  • 必须给路由添加name='quality_control_point_view',确保模板中的{% url %}能正确反向解析。

方案2:对主键进行URL编码/解码

如果不想修改路由规则,可通过编码主键中的斜杠来适配原str转换器:

  1. 模板修改:使用urlencode过滤器编码主键:
<tr onclick="location.href='{% url 'quality_control_point_view' object.id|urlencode %}'">
  1. 视图解码:在视图中对获取到的qcp_id解码,还原原始主键:
from urllib.parse import unquote
from django.views.generic import DetailView

class QualityControlPointView(DetailView):
    model = QualityControlPoint

    def get_object(self):
        # 解码URL编码后的主键
        qcp_id = unquote(self.kwargs['qcp_id'])
        return self.model.objects.get(id=qcp_id)

额外检查

确认你的AllQualityControlPointView中传递给模板的object(或上下文变量)确实包含正确的主键值QCP/0001,避免因变量传递错误导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:35:24