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

Django模板反向匹配treatment_detail URL报NoReverseMatch错误如何解决

报错原因

你遇到的NoReverseMatch报错和urls.py的路由配置本身无关,核心原因是:treatment_detail路由定义了必填路径参数patient_id,你在模板中调用{% url %}反向匹配该路由时,没有传入对应的patient_id参数,导致Django无法生成符合规则的URL。

解决方案

根据你使用这个表单的页面场景,选择对应修改方案:

场景1:表单放在treatment_detail.html页面中

该页面的get_context_data方法已经往模板上下文注入了patient_id变量,直接在模板调用{% url %}时传入参数即可,修改模板代码:

<form action="{% url 'patient:treatment_detail' patient_id=patient_id %}" method="get">
<input type="submit" class="btn btn-primary" value="get_doc" name="get_doc">
</form>

场景2:表单放在新增患者的add.html页面中

新增患者提交前还没有生成patient_id,不能直接反向匹配treatment_detail路由,你原本的逻辑已经在PatientAddView的post方法中处理完表单保存后,自动携带patient_id跳转到treatment_detail页面,这种情况下直接把表单的action改为指向新增患者的路由即可,同时注意补充CSRF校验标签、调整提交方法为POST:

<form action="{% url 'patient:patient_add' %}" method="post">
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="get_doc" name="get_doc">
</form>
可选优化建议

你当前urls.py里的patient_id没有指定类型,如果你确定该参数是UUID格式,可以修改路由规则做参数校验,避免非法值进入视图逻辑:

path(
    route='<uuid:patient_id>/',
    view=views.TreatmentTemplateView.as_view(),
    name='treatment_detail'),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:15:03