如何解决Django中单个端点双主键的URL反转与模板调用问题
Django双主键URL反转NoReverseMatch问题解决
错误根源
报错提示Reverse for 'record' with arguments '('', '')' not found,说明模板中传入URL反转的patient.id或medical_record.id为空值,核心原因是模板上下文未正确获取到有效主键变量。
解决方案
- 限定模板使用场景
只有在records视图渲染的medical_record.html模板中,才能直接使用patient.id和medical_record.id生成URL——因为只有这个视图会将这两个对象传入模板上下文。如果在其他模板中需要生成该URL,必须确保上下文包含对应的主键变量,比如:
{% url 'doctor_app:record' target_patient.id target_record.id %}
核对变量名拼写
严格匹配视图返回的上下文键与模板变量名:
视图返回的上下文是'patient'和'medical_record',模板中必须写patient.id和medical_record.id,不能出现拼写错误(比如误写为patient_id或record)。改用关键字参数传递(推荐)
在模板中用关键字参数指定主键,避免参数顺序错误,写法和视图中reverse调用保持一致:
{% url 'doctor_app:record' patient_id=patient.id record_id=medical_record.id %}
- 验证视图内URL反转
视图中已经通过reverse生成record_url并打印,查看控制台输出的URL是否正常。如果此处能正确生成URL,说明URL配置本身无问题,问题完全出在模板变量传递环节。
URL配置确认
你的URL规则path('medical_record/<int:patient_id>/<int:record_id>/', views.records, name='record')是正确的双主键URL写法,无需修改。
内容的提问来源于stack exchange,提问作者Erasmus Chawey
相关产品推荐
相关产品推荐

