Django项目Control应用网站运行正常但URL反向解析测试报错求助
解决Django测试中
NoReverseMatch错误的方案 你的问题核心在于URL命名空间的使用不一致——前端模板里用了带命名空间的URL标识,但测试代码里直接用了无命名空间的名称,导致反向解析失败。
问题拆解
- 你在HTML模板里写的是
{% url 'control:index' %},说明这个URL属于control应用的命名空间 - 但测试代码里调用
reverse('index')时没加命名空间前缀,Django没办法定位到对应的URL规则
修复步骤
给应用URL配置添加
app_name
在control/urls.py的最顶部加上这一行,这是命名空间生效的基础:app_name = 'control' urlpatterns = [ url(r'^$',views.IndexView.as_view(),name='index'), ]修改测试代码,匹配命名空间用法
把测试里的reverse('index')改成带命名空间的写法,和模板保持一致:class TestUrls(SimpleTestCase): def test_index_url_is_resolved(self): url = reverse('control:index') # 添加命名空间前缀 print(resolve(url))确认主项目URL配置的命名空间关联
检查项目根目录的urls.py,确保在包含应用URL时指定了namespace:from django.urls import include, url urlpatterns = [ url(r'^', include('control.urls', namespace='control')), ]
为什么网站正常但测试报错?
因为前端模板已经正确使用了control:index这个带命名空间的URL标识,所以网站能正常解析跳转;但测试代码里忽略了命名空间,Django在全局URL规则里找不到名为index的条目,因此抛出NoReverseMatch错误。
内容的提问来源于stack exchange,提问作者BHAVYA JAIN
相关产品推荐
相关产品推荐

