объект "module" не имеет атрибута "views" ошибка 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'),
)
все работает нормально, но если я включу его следующим образом
from django.conf.urls import patterns, include, url
from django.contrib import auth
urlpatterns = patterns('',
url(r'login/$', auth.views.login, name='login'),
)
Я получаю следующую ошибку
Exception Value: 'module' object has no attribute 'views'
что меня действительно беспокоит в другом проекте, я импортирую его вторым способом, и он работает нормально. Кто-нибудь знает, что здесь происходит?
2 ответов
во втором проекте вы, вероятно, уже импортировали 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>
первый импорт даже не должен упоминать login
вид. Это тоже сработает.
>>> from django.contrib.auth.views import logout
...
#then import auth.views.login
следующее не будет, потому что python не знает о views
модуль, так как он не зарегистрирован в auth.__init__.py
>>> from django.contrib import auth
>>> auth.views.login
...
AttributeError: 'module' object has no attribute 'views'
в первом импорт (from django.contrib.auth.views import login
), синтаксис точки пересекает иерархию модулей. В доступе urlpattern (auth.views.login
), точечный синтаксис делает свойство (т. е. класс) Поиск. Из моего shell_plus вы можете видеть, что" auth " не имеет свойства views.
In [1]: from django.contrib import auth
In [2]: auth.<TAB FOR COMPLETION>
auth.BACKEND_SESSION_KEY auth.load_backend
auth.ImproperlyConfigured auth.login
auth.PermissionDenied auth.logout
auth.REDIRECT_FIELD_NAME auth.models
auth.SESSION_KEY auth.re
auth.authenticate auth.rotate_token
auth.forms auth.settings
auth.get_backends auth.signals
auth.get_permission_codename auth.tokens
auth.get_user auth.user_logged_in
auth.get_user_model auth.user_logged_out
auth.hashers auth.user_login_failed
auth.import_by_path
вот почему он дает вам ошибку. Это действительно не должно работать, если вы пытаетесь это сделать в другом проекте/файле-если только ваш другой проект auth.__init__.py
автоматически загружает свои подмодули.