Django中使用reverse反转多参数URL时出现错误
解决Django URL多参数测试失败问题
错误原因及修复步骤
1. 测试方法参数错误
测试类中的方法是实例方法,必须以self作为第一个参数。你的测试方法直接定义id_patient和protocol作为参数,导致Django调用测试时无法传递正确参数,引发TypeError。
修复后的测试代码:
# test_urls.py from django.test import SimpleTestCase from django.urls import reverse, resolve from cardiotesting.views import * class TestUrls(SimpleTestCase): def test_new_cardio(self): # 改为self作为第一个参数 id_patient = '05' protocol = 'fox' url = reverse('new_cardio_testing', args=[id_patient, protocol]) print(resolve(url))
2. URL配置缺失第二个参数
你的URL路径仅定义了id_patient一个参数,但视图需要接收两个参数,导致reverse传递多参数时找不到匹配的URL规则。
修复后的urls.py:
# urls.py from django.urls import path from . import views urlpatterns = [ # 新增第二个参数<str:protocol> path('new/<str:id_patient>/<str:protocol>', views.new_cardio_testing, name='new_cardio_testing'), ]
3. 视图函数参数缺失request
Django视图函数的第一个参数必须是request对象,之后才是URL捕获的参数。你的视图直接定义id_patient和protocol,不符合Django视图规范。
修复后的views.py:
# views.py def new_cardio_testing(request, id_patient, protocol): # 增加request参数 pass
完成以上三处修复后,测试即可正常运行,传递多个参数时不会再报错。
内容的提问来源于stack exchange,提问作者Lucas VB
相关产品推荐
相关产品推荐

