2012-03-26 20 views
17

में एक पंजीकृत नेमस्पेस नहीं है, मैं नए डीजेगो परियोजना को नए जारी किए गए Django 1.4 में अपग्रेड करने का प्रयास कर रहा हूं, और python manage.py test चलाते समय मुझे कुछ समस्याएं आ रही हैं।'admin' Django 1.4

Django 1.3 में पारित आंतरिक परीक्षणों में से कई अब असफल हो रहे हैं, वास्तव में अजीब संदेशों के साथ जो मुझे ठीक नहीं लग रहा है। एक यह है कि सबसे प्रकट होता है:।

NoReverseMatch: u'admin' is not a registered namespace 

यह विशेष रूप से पासवर्ड बदलने के लिए django.contrib.auth परीक्षण (जिनमें से एक test_password_change_fails_with_mismatched_passwords (django.contrib.auth.tests.views.ChangePasswordTest) है अजीब बात है, नाम स्थान ठीक से पंजीकृत और आवेदन कार्यों ठीक है के लिए उठाया है। मैं 'नई' रास्ते में व्यवस्थापक का आयात कर रहा हूँ:

url(r'^admin/', include(admin.site.urls)), 

जब मैं विशेष रूप से इस त्रुटि को गूगल, सब मैं पा सकते हैं सब पर इस मुद्दे से संबंधित पुरानी योजना का उपयोग कर व्यवस्थापक यूआरएल आयात करने वाले लोग, और कुछ नहीं है।

मैंने INSTALLED_APPS से एक-एक करके ऐप्स को निकालने का प्रयास किया है, लेकिन ऑथ परीक्षण बस पास नहीं होंगे। साथ ही, जब मैं python manage.py shell से पाइथन दुभाषिया लोड करता हूं और reverse('admin:index') निष्पादित करता हूं तो यूआरएल /admin/ को बिना किसी त्रुटि के हल करता है। मैंने कोड को बड़े पैमाने पर पढ़ा है, और यह नहीं देख सकता कि यह कहां गिर सकता है।

जैसा कि मैंने पहले उल्लेख किया था, यह एकमात्र त्रुटि नहीं है जो हो रहा है। मुझे परीक्षण से AttributeError: AUTH_PROFILE_MODULE भी मिल रहा है, भले ही AUTH_PROFILE_MODULE मेरी settings.py फ़ाइल में परिभाषित किया गया हो। Django के अपने परीक्षण इस तरह विफल कैसे हो सकता है?

+1

आपके कोड में कुछ गड़बड़ है। Django परीक्षण सामान्य परिस्थितियों में विफल नहीं होते हैं। आपको बस सब कुछ सावधानी से जांचने की जरूरत है। मुझे एक ही त्रुटि थी, और यह मेरे urlpatterns में से एक में एक असंतुलित कोष्ठक से संबंधित हो गया। –

+0

क्या आप यह पता लगाना चाहते थे कि क्या हुआ? मैं ईमानदारी से इस तरह कुछ में चला गया और मुझे यकीन नहीं है कि क्या हुआ। मैं अपने टेम्पलेट सामान को अपने ऐप डीआईआर में नहीं ले जा रहा था। – stormlifter

+1

मेरे पास test_middleware_disabled जैसे कुछ django 1.5 परीक्षणों के लिए यह वही त्रुटि है। मैंने स्वीकार किए गए उत्तर में सुझाए गए TEMPLATE_LOADERS के आदेश को उलट करने का प्रयास किया है, और मैंने अपने ऐप के टेम्पलेट डीआईआर (जैसा कि अमीर द्वारा सुझाया गया है) से अपने व्यवस्थापक टेम्पलेट हटा दिए हैं, लेकिन मुझे अभी भी त्रुटि मिलती है। –

उत्तर

9

जैसा कि यह पता चला है, यह मेरी सेटिंग्स फ़ाइल में TEMPLATE_LOADERS कुंजी के आदेश के कारण था।

मैं निम्नलिखित था:

TEMPLATE_LOADERS = (
    'django.template.loaders.app_directories.Loader', 
    'django.template.loaders.filesystem.Loader', 
) 

जब व्यवस्थापक यूआरएल पीछे जो, किसी भी तरह, त्रुटि के कारण। दो दौर स्विचिंग इस मुद्दे को हल किया। मुझे यह जानना अच्छा लगेगा कि यह कैसे होता है, क्योंकि यह एक खाली Django 1.4 प्रोजेक्ट में पुन: उत्पन्न नहीं होता है।

पुनरुत्पादित था, हालांकि, settings.AUTH_PROFILE_MODULE के लिए AttributeError था। यह पता चलता है कि यह Django 1.4 में एक बग है, जिसे रिलीज दिवस here पर दायर किया गया था।

+0

क्या एट्रिब्यूट एरर बग के लिए कोई कामकाज है? – acjay

+0

मुझे अभी तक कोई नहीं मिला है - लेकिन मुझे यह जानना अच्छा लगेगा कि ऐसा करने का कोई तरीका है या नहीं। मैं इस मुद्दे को दी गई कम प्राथमिकता से निराश था, क्योंकि यह परीक्षण कोड के लिए टीडीडी या निरंतर एकीकरण का उपयोग रोकता है। मैंने एक कस्टम टेस्ट रनर बनाने की कोशिश की जो विशेष रूप से इस परीक्षण को छोड़ देगा, लेकिन यह काम नहीं कर सका। एकमात्र समाधान मुझे पता है कि (जो आदर्श नहीं है) केवल अपने स्वयं के ऐप्स का परीक्षण करना है। यदि आप 'django-nose' का उपयोग करते हैं, तो यह डिफ़ॉल्ट व्यवहार है। –

2

app_directories टेम्पलेट लोडर INSTALLED_APPS टेम्पलेट निर्देशिका से टेम्पलेट लोड करता है, जबकि फाइल सिस्टम लोडर उन्हें आपकी TEMPLATE_DIRS सेटिंग्स में कॉन्फ़िगर की गई टेम्पलेट निर्देशिका से लोड करता है।

उनमें से दो को स्विच करना एक बड़ा अंतर बनाता है क्योंकि यदि आपके ऐप में कस्टम टेम्पलेट्स हैं तो यह ऐप_डायरेक्टरी शीर्ष पर नहीं होने पर लोड नहीं होगा। यदि फाइल सिस्टम लोडर शीर्ष पर है, तो django install_apps से डिफ़ॉल्ट लोड करने से पहले अपनी टेम्पलेट निर्देशिका में टेम्पलेट की तलाश करेगा।

यही कारण है कि यह एक खाली Django परियोजना में पुन: उत्पन्न नहीं होता है। यह सही स्थानों पर टेम्पलेट्स की तलाश करेगा।

+3

यह प्रश्न URLconf के संबंध में एक त्रुटि के बारे में है, टेम्पलेट्स नहीं। यही कारण है कि मैं ठीक था (और अभी भी) फिक्स के बारे में परेशान था। –

14

लघु उत्तर: आप Django व्यवस्थापक टेम्पलेट Django के पिछले संस्करण से आपको अपने ऐप्लिकेशन की टेम्पलेट्स निर्देशिका के पर में नकल फ़ाइलों की एक प्रति है, तो आप Django उन्नत बनाया लेकिन अद्यतन नहीं किया (फिर से कॉपी) उन स्थानीय टेम्पलेट्स ।

लांग उत्तर: इस समस्या का मुख्य कारण Django व्यवस्थापक टेम्पलेट फ़ाइलों के एक पुराने संस्करण का उपयोग कर रहा है (जो स्थापित कर रहे हैं जहां खुद django स्थापित किया गया है, आमतौर पर अजगर के site-packages या dist-packages निर्देशिका)।

One deprecated feature worth noting is the shift to “new-style” url tag. Prior to Django 1.3, syntax like {% url myview %} was interpreted incorrectly (Django considered "myview" to be a literal name of a view, not a template variable named myview). Django 1.3 and above introduced the {% load url from future %} syntax to bring in the corrected behavior where myview was seen as a variable.

तो, समस्या आप में से एक में व्यवस्थापक के टेम्पलेट फ़ाइलों की एक प्रति है है: यूआरएल टेम्पलेट टैग के बारे में Django 1.5 में एक पिछड़े असंगत परिवर्तन, जिसमें पहले पैरामीटर एक स्ट्रिंग, Django 1.5 release notes से होना चाहिए नहीं है आपके ऐप के टेम्पलेट्स फ़ोल्डर, जो Django के पुराने संस्करण से कॉपी किया गया है। यह आमतौर पर डिफ़ॉल्ट व्यवस्थापक टेम्पलेट्स ओवरराइड करने के लिए किया जाता है। पिछड़े असंगत परिवर्तन के कारण, ये पुरानी टेम्पलेट फ़ाइल एक नए Django पर्यावरण में लोड नहीं हो सकती है, और अजीब त्रुटि का कारण बनती है: NoReverseMatch: u'admin' is not a registered namespace

TEMPLATE_LOADERS प्रविष्टियों का क्रम बदलना डिफ़ॉल्ट टेम्पलेट फ़ाइल के पक्ष में स्थानीय व्यवस्थापक टेम्पलेट्स संशोधनों को अनदेखा कर देगा (क्योंकि डिफ़ॉल्ट Django टेम्पलेट filesystem.Loader के साथ पूर्ण पथ से लोड होते हैं)। यदि संशोधनों की आवश्यकता है (जो आमतौर पर मामला है), तो आपको अपने स्थानीय व्यवस्थापक टेम्पलेट फ़ाइलों को अपने नए Django स्थापना टेम्पलेट्स से अपडेट करना होगा और उन पर अपने संशोधन दोबारा लागू करना होगा।

नोट 1: इसी तरह की स्थिति तब होती है जब स्थानीय व्यवस्थापक टेम्पलेट Django स्थापना के डिफ़ॉल्ट से नए होते हैं, ऐसा लगता है कि यह आपका मामला है। इसी प्रकार, बेहतर टेम्पलेट व्यवस्थापक टेम्पलेट्स की सभी प्रतियों को अपडेट करना है।

नोट 2: वर्चुअलएन्व का उपयोग करते समय ऐसी त्रुटि प्राप्त करने की एक और संभावना है। उदाहरण के लिए, यदि आप वर्चुअलएन्व के साथ अपनी प्रोजेक्ट चला रहे हैं लेकिन TEMPLATE_DIRS Django व्यवस्थापक टेम्पलेट्स के लिए प्रविष्टि आपके वैश्विक पायथन इंस्टॉलेशन के लिए है, तो आपको यह त्रुटि मिल सकती है।

+1

कमाल का जवाब! काश मैं इसे कई बार बढ़ा सकता हूं क्योंकि आप इसके लायक हैं। –

5

urls.py फ़ाइल में शामिल विधि के भीतर नाम स्थान = "व्यवस्थापक" जोड़ने का प्रयास करें।

पूर्व: यूआरएल (आर '^ व्यवस्थापक /', ("someUrlpattern", नाम स्थान = "व्यवस्थापक") शामिल हैं)

0

मेरे solutuion नवीनतम cersion को Django उन्नत करने के लिए किया गया था: स्थापित पिप --upgrade Django == 1.6.1 इससे पहले, अपने स्थापित संस्करण की जांच करें: पाइप फ्रीज | grep Django - मैंने पाया कि रिलीज सर्वर पर एक पुराना संस्करण था, इस मुद्दे को हल किया गया अपग्रेड!

0

मैं एक ऐसी ही त्रुटि संदेश मेरा क्या क्योंकि मेरे यूआरएल conf 2 logout यूआरएल परिभाषित था।

urlpatterns = [ 
    url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'), 
    url(r'^api/v1/', include(router.urls)), 
    url(r'^logout/$', auth_views.logout, name='logout'), 
    url(r'^login/$', auth_views.login, {'template_name': 'login.html'}, name='login'), 
    url(r'^logout/$', auth_views.logout, {'template_name': 'logged_out.html'}, name='logout'), 
]