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),
]
在 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),
]