django.urls.exceptions.NoReverseMatch:找不到'/'的反向字符 '/'不是有效的视图函数或模式名称

问题描述

我正在尝试遵循Python TDD O'Reilly。

我知道他们使用的django版本是旧版本,但是,即使进行了所有可能的修改,我仍然收到此错误

我的urls.py文件

superlist.urls.py

from django.contrib import admin
from django.urls import path,include,re_path
from django.conf.urls import url


urlpatterns = [
    path('admin/',admin.site.urls),path('',include('lists.urls')),]

lists.urls.py


urlpatterns = [
    path('/',home_page)
]

lists.views.py

from django.shortcuts import (render,HttpResponse)
from rest_framework.decorators import api_view
# Create your views here.

@api_view()
def home_page(request):
    return HttpResponse('Response')

lists.tests.py

from django.test import TestCase
from .views import home_page #


class HomePageTest(TestCase):
    def test_root_url_resolves_to_home_page_view(self):
        found = reverse('/') 
        self.assertEqual(found.func,home_page)

我该如何解决?我已经尝试搜索很长时间了,但无济于事。

解决方法

reverse函数is used like this (Django docs)

 reverse(viewname,urlconf=None,args=None,kwargs=None,current_app=None)¶

“视图名称可以是URL模式名称或可调用的视图对象”

您正试图通过使用链接到该视图的URL路径来引用该视图。您实际上需要做的是在您的path调用中添加一个URL模式名称,并引用它。因此,您可以使用:

path('/',home_page,name='home')

然后

found = reverse('home') 

此外,reverse函数返回链接到您的视图而不是实际视图的URL路径。因此,您的.assertEqual测试仍将失败。您可能会在Django docs中找到反向解析网址的示例。