NoReverseMatch त्रुटि क्या है, और मैं इसे कैसे ठीक करूं?


119

मेरे पास कुछ कोड है और जब यह निष्पादित होता है, तो यह एक NoReverseMatch कहती है:

NoReverseMatch at / my_url / Reverse for 'my_url_name' तर्कों के साथ '()' और कीवर्ड तर्क '{}' नहीं मिला। एन पैटर्न (ओं) की कोशिश की: []

इसका क्या मतलब है, और मैं इसके बारे में क्या कर सकता हूं?

जवाबों:


243

NoReverseMatchत्रुटि कह रही है कि Django यूआरएल आपके इंस्टॉल किए गए एप्लिकेशन के यूआरएल में से किसी में प्रदान की है के लिए एक मिलान यूआरएल ढांचा नहीं मिल रहा।

NoReverseMatch अपवाद django.core.urlresolvers द्वारा उठाया जाता है जब आपके URLconf में एक मिलान किए गए URL को आपूर्ति किए गए मापदंडों के आधार पर पहचाना नहीं जा सकता है।

इसे डीबग करना प्रारंभ करने के लिए, आपको दिए गए त्रुटि संदेश को बाधित करके प्रारंभ करना होगा।

  • NoReverseMatch पर / my_url /

    यह वह url है जिसका वर्तमान में प्रतिपादन किया जा रहा है, यह यह url है कि आपका एप्लिकेशन वर्तमान में एक्सेस करने का प्रयास कर रहा है, लेकिन इसमें एक url है जिसका मिलान नहीं किया जा सकता है

  • 'My_url_name' के लिए उल्टा

    यह url का नाम है जिसे यह नहीं पा सकता है

  • तर्कों के साथ '()' और

    ये url को प्रदान करने वाले गैर-कीवर्ड तर्क हैं

  • कीवर्ड तर्क '{}' नहीं मिला।

    ये url को प्रदान करने वाले खोजशब्द तर्क हैं

  • एन पैटर्न (ओं) की कोशिश की: []

    ये वे पैटर्न हैं जो इसे आपकी urls.py फ़ाइलों में ढूंढने में सक्षम थे जिन्हें इसके विरुद्ध मिलान करने का प्रयास किया गया था

वर्तमान में प्रदान किए जा रहे url के लिए प्रासंगिक अपने स्रोत में कोड का पता लगाने से शुरू करें - url, दृश्य और शामिल कोई भी टेम्पलेट। ज्यादातर मामलों में, यह उस कोड का हिस्सा होगा जिसे आप वर्तमान में विकसित कर रहे हैं।

एक बार जब आप ऐसा कर लेते हैं, तो कोड के माध्यम से इस क्रम में पढ़ते हैं कि django का अनुसरण तब तक होगा जब तक आप उस कोड की पंक्ति तक नहीं पहुंच जाते जो आपके लिए एक url बनाने की कोशिश कर रहा है my_url_name। फिर, यह शायद एक ऐसी जगह पर है जिसे आपने हाल ही में बदला है।

अब जब आपको पता चला है कि त्रुटि कहाँ उत्पन्न हो रही है, तो समस्या को हल करने के लिए त्रुटि संदेश के अन्य भागों का उपयोग करें।

उरल नाम

  • क्या कोई टाइपो हैं?
  • क्या आपने वह url प्रदान किया है जिसे आप दिए गए नाम तक पहुँचाने का प्रयास कर रहे हैं?
  • यदि आपने ऐप urls.py(जैसे app_name = 'my_app') में app_name सेट किया है (जैसे ) या यदि आपने ऐप को एक नामस्थान के साथ शामिल किया है (उदाहरण के लिए include('myapp.urls', namespace='myapp'), तो आपको नाम बदलने के लिए नाम बदलने की आवश्यकता है, जैसे कि {% url 'myapp:my_url_name' %}या reverse('myapp:my_url_name')

तर्क और खोजशब्द तर्क

तर्क और कीवर्ड तर्क का उपयोग किसी भी कैप्चर समूह के साथ मेल खाने के लिए किया जाता है, जो दिए गए url के भीतर मौजूद हैं, जो ()कि url पैटर्न में आसपास के कोष्ठक द्वारा पहचाने जा सकते हैं ।

आपके द्वारा मेल किए जा रहे url को मानने के लिए अतिरिक्त तर्कों की आवश्यकता होती है, त्रुटि संदेश में एक नज़र डालें और पहले दिए गए तर्कों के लिए मान सही दिखें तो नज़र डालें।

यदि वे सही नहीं हैं:

  • मान अनुपलब्ध है या रिक्त स्ट्रिंग है

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

  • कीवर्ड तर्क में एक टाइपो है

    इसे या तो url पैटर्न में सुधारें, या आपके द्वारा बनाए जा रहे url में।

यदि वे सही हैं:

  • रीगेक्स को डीबग करें

    आप जल्दी से परीक्षण करने के लिए regexr जैसी वेबसाइट का उपयोग कर सकते हैं कि क्या आपका पैटर्न आपके द्वारा बनाए जा रहे url से मेल खाता है, शीर्ष पर regex फ़ील्ड में url पैटर्न की प्रतिलिपि बनाएँ और फिर पाठ क्षेत्र का उपयोग करके किसी भी url को शामिल करें जो आपको लगता है कि के खिलाफ मैच होना चाहिए।

    साधारण गलती:

    • .वाइल्ड कार्ड चरित्र या किसी अन्य रेगेक्स वर्णों के साथ मिलान करना

      एक \उपसर्ग के साथ विशिष्ट वर्णों से बचने के लिए याद रखें

    • केवल निचले / ऊपरी मामलों के पात्रों के खिलाफ मिलान

      या तो उपयोग करने का प्रयास a-Zया \wके बजाय a-zयाA-Z

  • जांचें कि आपके द्वारा मिलान किए जा रहे पैटर्न को आजमाए गए पैटर्न में शामिल किया गया है

    यदि यह यहां नहीं है तो इसका संभव है कि आप INSTALLED_APPSसेटिंग के भीतर अपने एप्लिकेशन को शामिल करना भूल गए हों (या एप्लिकेशन के ऑर्डर को देखने की INSTALLED_APPSआवश्यकता हो सकती है)

Django संस्करण

Django 1.10 में, अपने अजगर पथ द्वारा एक url को उलटने की क्षमता को हटा दिया गया था। इसके बजाय नामित पथ का उपयोग किया जाना चाहिए।


यदि आप अभी भी समस्या को ट्रैक नहीं कर पा रहे हैं, तो एक नया प्रश्न पूछने के लिए स्वतंत्र महसूस करें, जिसमें आपने जो प्रयास किया है, उसमें आपने क्या शोध किया है (आप इस प्रश्न से लिंक कर सकते हैं), और फिर संबंधित कोड को शामिल करें समस्या - आप जो मेल कर रहे हैं वह url, कोई भी प्रासंगिक url पैटर्न, त्रुटि संदेश का वह भाग जो दिखाता है कि django ने क्या मिलान करने का प्रयास किया है, और संभवतः INSTALLED_APPSलागू होने पर सेटिंग।


11
अंत में हमारे पास एक विहित जवाब है कि हम
दप

क्या आप django 1.10 में नामित पथ पर विस्तृत कर सकते हैं?
ऋषि पौडेल

2
हाँ, set app_name in the app's urls.py (e.g. app_name = 'my_app') बिंदु है
CK

मुझे यह लाइव रेगेक्स टेस्टर अधिक मददगार लगता है: regex101.com
obotezat

NoReverseMatch पर इस शानदार ट्यूटोरियल के लिए धन्यवाद! मैं अपने मुद्दे को हल करने में सक्षम था।
newmachines_xyz

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.