Django中reverse('users:create')触发NoReverseMatch错误的解决求助
Django反向解析错误:Reverse for 'create' not found
错误详情
Django: django.urls.exceptions.NoReverseMatch: Reverse for 'create' not found. 'create' is not a valid view function or pattern name.
测试代码
from django.urls import reverse from django.test import TestCase from rest_framework import status from rest_framework.test import APIClient from users.models import User class UsersTests(TestCase): def setUp(self): self.client = APIClient() self.user = User.objects.create(chat_id=123456789, language='en') def test_create_valid_user(self): response = self.client.post( reverse('users:create'), data = { 'chat_id': 1234, 'language': 'en' }, format='json' ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(User.objects.count(), 2)
users/urls.py 配置
from django.urls import path from . import views app_name = 'users' urlpatterns = [ path('get-all/', views.get_all), path('create/', views.create), path('get-by-chat-id/<int:chat_id>/', views.get_by_chat_id), path('update/<int:chat_id>/', views.update) ]
主app/urls.py 配置
from django.urls import path, include urlpatterns = [ path('users/', include('users.urls', namespace='users')), ]
python manage.py show_urls 输出
/users/create/ users.views.create /users/get-all/ users.views.get_all /users/get-by-chat-id/<int:chat_id>/ users.views.get_by_chat_id /users/update/<int:chat_id>/ users.views.update
用户确认错误由reverse('users:create')引发,寻求修复方案。
修复方案
Django的reverse函数依赖URL配置中的name属性进行反向解析,你的URL路径未设置name,导致无法匹配对应路由。
修改users/urls.py,为每个路径添加name参数:
from django.urls import path from . import views app_name = 'users' urlpatterns = [ path('get-all/', views.get_all, name='get-all'), path('create/', views.create, name='create'), path('get-by-chat-id/<int:chat_id>/', views.get_by_chat_id, name='get-by-chat-id'), path('update/<int:chat_id>/', views.update, name='update') ]
添加name='create'后,reverse('users:create')就能正确解析到/users/create/路径,重新运行测试即可解决问题。
内容的提问来源于stack exchange,提问作者SReza S
相关产品推荐
相关产品推荐

