obiekt „module” nie ma błędu django atrybutu „widoki”


Jeśli importuję wbudowaną prezentację loginu Django, jak pokazano w poniższym kodzie
from django.conf.urls import patterns, include, url
from django.contrib.auth.views import loginurlpatterns = patterns('',
url(r'login/$', login, name='login'),)

Wszystko działa dobrze, ale jeśli włączę to w następujący sposób
from django.conf.urls import patterns, include, url
from django.contrib import authurlpatterns = patterns('',
url(r'login/$', auth.views.login, name='login'),)

Otrzymuję następujący błąd
Exception Value: 'module' object has no attribute 'views'

Co naprawdę mnie niepokoi, to fakt, że w innym projekcie importuję go w drugim sposobie i działa dobrze. Czy ktoś wie, co się tutaj dzieje?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W drugim projekcie prawdopodobnie importowałeś już
Auth.views
przed wywołaniem auth.views.login . Python szyje importowane moduły, jeśli to możliwe.
Na przykład to zadziała
>>> 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>

Pierwszy import powinien nawet nie wspomnieć o wydajności
Login
. To też będzie działać.
>>> from django.contrib.auth.views import logout...
#then import auth.views.login

Nie zostanie wykonane, ponieważ Python nie wie o module
, ponieważ nie jest zarejestrowany w
Auth .__ init __. PY
>>> from django.contrib import auth>>> auth.views.login...
AttributeError: 'module' object has no attribute 'views'
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W pierwszym imporcie ( z Django.Contrib.auth.views Importuj login ) Składnia punktowa przecina hierarchię modułu. W dostępie UrlPattern ( auth.views.login ), składnia punktowa sprawia, że ​​właściwość (tj. Klasa). Z mojego shell_plus można zobaczyć, że "autoryzacja" nie ma właściwości poglądów.
In [1]: from django.contrib import authIn [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

Dlatego jest to błąd. To naprawdę nie powinno działać, jeśli próbujesz to zrobić w innym projekcie/pliku - chyba że
auth.__init__.py
innego projektu automatycznie ładuje swoje podmoduły.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się