urlpatterns 中的 Django 错误:没有名为视图的模块

Django error in urlpatterns: No module named views

在 Django 1 中7.x这个构造是有效的:

# urls.py

import views

urlpatterns = ('',
   url(r'^$', views.index)
)

在 Django 1.8.X 中它停止工作了。现在,当我 运行 默认 Django 服务器时收到此错误消息:

No module named 'views'

我也试过这个:

from system.views import *

urlpatterns = ('',
   url(r'^$', views.index)
)

这导致:

name 'views' is not defined

还有这个:

from system import views

urlpatterns = ('',
   url(r'^$', views.index)
)

我还尝试了更多我在 Whosebug 上看到的组合,但其中 none 有效。希望有人能分享一下应该用什么魔术组合。

编辑

\home
  \jacobian
     \apps
        \apps
          __init__.py
          settings.py
          urls.py
          views.py
          ...
       \system
          __init__.py
          urls.py
          views.py
          ...

我只是想重现这个问题。看来您是对的,只是 import views 不再有效。但是,以下导入语句对我来说效果很好:

from . import views

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', views.index)
]

您可以在 django documentation 上查看示例。我还认为这个相关的 Stack Overflow 问题可以阐明他们使用点导入语法的原因:

问:Python "from [dot]package import ..." syntax

您应该包含您创建的应用程序中的 views.py 文件。所以试试

from <your app name>.views import *

你的说法有点混乱。

在 1.8 版本之前是

from myapp import views

urlpatterns = patterns('',
    url('^$', views.myview),
    url('^other/$', views.otherview),
)

现在,从 1.8 版开始,在给 urlpatterns 赋值时不需要第一个 void 参数给 patterns。实际上根本不需要调用patterns

这是我使用 Django 1.8 的最新项目的一个示例:

urlpatterns = [
    url(r'^$', HomePage.as_view(), name='home'),
    url(r'^play/', include('play.urls', namespace='play', app_name='play')),
]

并且如 Django 1.8 release docs 中所述:

Thus patterns() serves little purpose and is a burden when teaching new users (answering the newbie’s question “why do I need this empty string as the first argument to patterns()?”). For these reasons, we are deprecating it. Updating your code is as simple as ensuring that urlpatterns is a list of django.conf.urls.url() instances. For example:

from django.conf.urls import url
from myapp import views

urlpatterns = [
    url('^$', views.myview),
    url('^other/$', views.otherview),
]