2017-09-07 60 views
0

我有一个Django项目,具有以下目录结构:Django的manage.py测试无法看到urls.py,虽然能的runserver

BaseDir 
| manage.py 
| configDir 
\ 
    | settings.py , urls.py, wsgi.py 
|mainApp 
\ 
    |urls.py , views, models etc. 
    | tests 
    \ 
    |urlTest.py 

(如果上面是不明确的,有一个Django配置目录和mainApp目录中,mainApp有它自己的urls.py和测试目录,所有的目录都与初始化的.py Python模块)

,如果我跑

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')) 

配置/ 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'), 
    [...] 

可有人建议我在做什么错?这并没有太大的意义

回答

2

你已经宣布mainApp/urls.py的APP_NAME,所以你需要使用的反向调用:

pprint.pprint(reverse('app:index')) 
+0

这样做,谢谢 – ndp

1

NoReverseMatch异常是由django.urls时提出根据提供的参数无法识别URLconf中的匹配URL。

你也应该在urlConf参数传递给reverse功能

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

From the docs

URL配置参数是一个包含URL模式 使用逆转URL配置模块。默认情况下,使用当前 线程的根URLconf。

+0

非常感谢,它必须是简单的东西! – ndp

相关问题