Django manage.py测试看不到urls.py,虽然runserver可以

时间:2017-09-07 11:05:42

标签: python django unit-testing

我有一个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'),
    [...]

有人可以建议我做错了吗?这没有多大意义

2 个答案:

答案 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)

From the docs

  

urlconf参数是包含URL模式的URLconf模块   用于倒车。默认情况下,当前的根URLconf   使用了线程。