'module'对象没有属性'views'django错误

nik*_*nik 11 python django

如果我导入django的内置登录视图,如下面的代码

from django.conf.urls import patterns, include, url
from django.contrib.auth.views import login

urlpatterns = patterns('',    
    url(r'login/$', login, name='login'),
)
Run Code Online (Sandbox Code Playgroud)

每件事都运作良好,但如果我将以下列方式包括它

from django.conf.urls import patterns, include, url
from django.contrib import auth

urlpatterns = patterns('',    
    url(r'login/$', auth.views.login, name='login'),
)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

Exception Value: 'module' object has no attribute 'views'
Run Code Online (Sandbox Code Playgroud)

什么真正困扰我是在另一个项目我导入它的第二种方式,它工作正常.有谁知道这里发生了什么?

vik*_*kki 12

在第二个项目中,您可能已经auth.views在调用之前导入了模块auth.views.login.Python尽可能地缝合您导入的模块.

例如,这将起作用

>>> from django.contrib.auth.views import login #or from django.contrib.auth import views
>>> from django.contrib import auth

>>> auth.views.login
<function login at 0x02C37C30>
Run Code Online (Sandbox Code Playgroud)

第一次导入甚至不必提及login视图.这也行.

>>> from django.contrib.auth.views import logout
...
#then import auth.views.login
Run Code Online (Sandbox Code Playgroud)

以下不会,因为python不知道该views模块,因为它没有注册auth.__init__.py

>>> from django.contrib import auth

>>> auth.views.login
...
AttributeError: 'module' object has no attribute 'views'
Run Code Online (Sandbox Code Playgroud)

  • 在学习python时,我似乎错过了一个非常重要的观点.我记不起在任何地方读到它"你不能导入一个包然后再打电话给package.module.function()." 似乎没有人在任何地方谈论这种包装的限制. (3认同)