尝试导入视图时,Django导入不起作用

时间:2013-12-19 20:27:58

标签: python django django-urls importerror

我有以下urls.py文件:

from django.conf.urls import patterns, url
from base import views

urlpatterns = patterns('',
    url(r'^$', 'views.index', name='index'),
    url(r'^item/new', 'views.newItem', name='newItem'),
    url(r'^item/submitted', 'views.itemSubmitted', name='itemSubmitted'),
)

这不起作用,它给我一条ImportError消息,说明没有名为views的模块。当我删除上面的第二个导入行并将views.viewname中的行更改为base.views.viewname时,它可以工作。有人知道为什么导入不起作用?

1 个答案:

答案 0 :(得分:2)

您的url route list语句使用字符串语句来定义视图的位置。 Django将在需要时尝试延迟加载视图方法,这对于导入视图方法会导致导入循环的奇怪情况非常有用。如果导入循环不是问题(它们不应该是),那么您有两种方法:

from django.conf.urls import patterns, url
from base import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^item/new', views.newItem, name='newItem'),
    url(r'^item/submitted', views.itemSubmitted, name='itemSubmitted'),
)

from django.conf.urls import patterns, url

urlpatterns = patterns('',
    url(r'^$', 'base.views.index', name='index'),
    url(r'^item/new', 'base.views.newItem', name='newItem'),
    url(r'^item/submitted', 'base.views.itemSubmitted', name='itemSubmitted'),
)

在前者中,您将视图方法作为路径的属性传递。在后者中,您将传递路径到视图方法。请注意,在后者中,您不需要为视图提供import语句。

要减少重复,你还可以提取重复的前缀'base.views':

from django.conf.urls import patterns, url

urlpatterns = patterns('base.views',
    url(r'^$', 'index', name='index'),
    url(r'^item/new', 'newItem', name='newItem'),
    url(r'^item/submitted', 'itemSubmitted', name='itemSubmitted'),
)