我有一个django项目,具有以下目录结构:
BaseDir
| manage.py
| configDir
\
| settings.py , urls.py, wsgi.py
|mainApp
\
|urls.py , views, models etc.
| tests
\
|urlTest.py
(如果上面不清楚,有一个django配置目录和一个mainApp目录,mainApp有自己的urls.py和测试目录,所有目录都是带有 init 的python模块的.py)
如果我跑
manage.py runserver
我在django服务器上运行预期的应用程序。
然而正在运行
manage.py test
我得到以下
django.urls.exceptions.NoReverseMatch: Reverse for 'index' not found. 'index' is not a valid view function or pattern name.
测试如下:
[...]
class TestSth(BaseTest):
def setUp(self):
[some db setup such as users etc]
def test_get(self):
pprint.pprint(reverse('index'))
config / urls.py是:
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^mainApp/', include('mainApp.urls')),
]
mainApp / urls.py是:
from django.conf.urls import url
from . import views
from django.contrib.auth import views as auth_views
app_name = 'app'
urlpatterns = [
#/app/
url(r'^$', views.IndexView.as_view(), name='index'),
[...]
有人可以建议我做错了吗?这没有多大意义
答案 0 :(得分:2)
您已在mainApp / urls.py中声明了app_name,因此您需要在反向调用中使用该名称:
pprint.pprint(reverse('app:index'))
答案 1 :(得分:1)
当根据提供的参数无法识别您的URLconf中的匹配网址时,NoReverseMatch
会引发django.urls
异常。
您还应该将urlConf
参数传递给reverse
函数
reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
urlconf参数是包含URL模式的URLconf模块 用于倒车。默认情况下,当前的根URLconf 使用了线程。