2014-04-26 14 views
9

अगर मैं 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' 

क्या वास्तव में परेशान कर रहा है मुझे एक और परियोजना में है मिल रहा मैं इसे दूसरी तरह से आयात कर रहा हूं और यह ठीक काम कर रहा है। क्या किसी को पता है कि यहां क्या हो रहा है?

उत्तर

10

दूसरी परियोजना में आपने शायद auth.views.login पर कॉल करने से पहले auth.views मॉड्यूल आयात कर लिया है। पाइथन आपके आयातित मॉड्यूल को तब कर सकता है जब यह कर सकता है।

उदाहरण के लिए, इस काम करेंगे

>>> 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 

निम्नलिखित क्योंकि अजगर views मॉड्यूल के बारे में पता नहीं है नहीं है, क्योंकि यह auth.__init__.py

>>> from django.contrib import auth 

>>> auth.views.login 
... 
AttributeError: 'module' object has no attribute 'views' 
+3

में पंजीकृत नहीं है ऐसा लगता है जैसे मैं एक बहुत महत्वपूर्ण बात याद अजगर सीखने जबकि। मुझे इसे कहीं भी पढ़ना याद नहीं है कि "आप एक पैकेज आयात नहीं कर सकते हैं और बाद में कॉल पैकेज.module.function() बाद में।" कोई भी शरीर कहीं भी संकुल के इस प्रतिबंध के बारे में बात नहीं करता है। – nik

+1

@Nik मुझे भी सुनवाई के तरीके को सीखना पड़ा, लेकिन ऐसा इसलिए है क्योंकि मुझे ठीक से समझ में नहीं आया कि पाइथन में आयात कैसे काम करता है। एक बार जब आप इसे समझ लेंगे, तो यह स्पष्ट है कि ऐसा क्यों होता है। – vikki

1

पहले आयात (from django.contrib.auth.views import login) में, डॉट सिंटैक्स मॉड्यूल पदानुक्रम को पार कर रहा है। Urlpattern पहुंच (auth.views.login) में, डॉट-सिंटैक्स संपत्ति (यानी कक्षा) लुकअप कर रहा है। मेरे shell_plus से, आप देख सकते हैं कि "auth" में कोई दृश्य प्रॉपर्टी नहीं है।

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 अपने सबोड्यूल्यूल को स्वतः लोड नहीं कर रही हो।

संबंधित मुद्दे