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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:32:45