NoReverseMatch hatası nedir ve bunu nasıl düzeltirim?


119

Bazı kodum var ve çalıştırıldığında, şunu söyleyerek bir NoReverseMatch atıyor:

NoReverseMatch at / my_url / Reverse de 'my_url_name' için '()' bağımsız değişkenleri ve anahtar kelime bağımsız değişkenleri '{}' bulunamadı. n desen (ler) denendi: []

Bu ne anlama geliyor ve bu konuda ne yapabilirim?

Yanıtlar:


243

NoReverseMatchHata Django Yüklü uygulamanın URL'lerin herhangi sağladığınız url için eşleşen bir URL kalıbının bulamadığını söylüyor.

NoReverseMatch istisnası, django.core.urlresolvers tarafından sağlanan parametrelere göre URLconf'unuzdaki eşleşen bir URL tanımlanamadığında ortaya çıkar.

Hata ayıklamaya başlamak için, size verilen hata mesajını keserek başlamanız gerekir.

  • / My_url / konumunda NoReverseMatch

    Bu, şu anda işlenmekte olan url, uygulamanızın şu anda erişmeye çalıştığı url, ancak eşleştirilemeyen bir url içeriyor

  • 'My_url_name' için tersi

    Bu, bulamadığı url'nin adıdır

  • '()' bağımsız değişkenleriyle ve

    Bunlar, URL'ye sağladığı anahtar kelime olmayan argümanlardır.

  • anahtar kelime bağımsız değişkenleri '{}' bulunamadı.

    Bunlar, url'ye sağladığı anahtar kelime argümanlarıdır

  • n desen (ler) denendi: []

    Bunlar, eşleştirmeye çalıştığı urls.py dosyalarınızda bulabildiği kalıplardır.

Kaynağınızdaki şu anda işlenmekte olan url ile ilgili kodu (url, görünüm ve ilgili tüm şablonlar) bularak başlayın. Çoğu durumda bu, şu anda geliştirmekte olduğunuz kodun parçası olacaktır.

Bunu yaptıktan sonra, django'nun sizin için bir url oluşturmaya çalışan kod satırına ulaşana kadar izleyeceği sırayla kodu okuyun my_url_name. Yine, bu muhtemelen yakın zamanda değiştirdiğiniz bir yerdedir.

Artık hatanın nerede oluştuğunu keşfettiğinize göre, sorunu çözmek için hata mesajının diğer bölümlerini kullanın.

Url adı

  • Herhangi bir yazım hatası var mı?
  • Verilen ada erişmeye çalıştığınız url'yi sağladınız mı?
  • Uygulamanın içinde app_name ayarladıysanız urls.py(ör. app_name = 'my_app') Veya uygulamayı bir ad alanına dahil ettiyseniz (örneğin include('myapp.urls', namespace='myapp'), tersine çevirirken ad alanını eklemeniz gerekir, ör. {% url 'myapp:my_url_name' %}Veya reverse('myapp:my_url_name').

Bağımsız Değişkenler ve Anahtar Kelime Argümanları

Argümanlar ve anahtar kelime argümanları, belirli bir url ()içinde bulunan ve url modelinde etrafındaki parantezlerle tanımlanabilen herhangi bir yakalama grubuyla eşleşmek için kullanılır .

Eşleştirdiğiniz url'nin ek bağımsız değişkenler gerektirdiğini varsayarsak, hata mesajına bir göz atın ve önce verilen bağımsız değişkenlerin değerinin doğru olup olmadığına bakın.

Doğru değillerse:

  • Değer eksik veya boş bir dize

    Bu genellikle, geçirdiğiniz değerin olmasını beklediğiniz değeri içermediği anlamına gelir. Bunun için değeri atadığınız yere bir göz atın, kesme noktaları ayarlayın ve bu değerin neden doğru bir şekilde geçirilmediğini anlamanız gerekir.

  • Anahtar kelime bağımsız değişkeninde bir yazım hatası var

    Bunu ya url kalıbında ya da oluşturduğunuz url'de düzeltin.

Doğruysa:

  • Normal ifadede hata ayıklayın

    Düzeninizin oluşturduğunuzu düşündüğünüz url ile eşleşip eşleşmediğini hızlı bir şekilde test etmek için regexr gibi bir web sitesi kullanabilir , url kalıbını üstteki normal ifade alanına kopyalayabilir ve ardından metin alanını düşündüğünüz url'leri eklemek için kullanabilirsiniz. ile eşleşmelidir.

    Yaygın hatalar:

    • .Joker karakter veya diğer normal ifade karakterleriyle eşleştirme

      \Önek ile belirli karakterlerin dışına çıkmayı unutmayın

    • Yalnızca küçük / büyük karakterlerle eşleştirme

      Ya kullanmayı deneyin a-Zveya \wyerine a-zveyaA-Z

  • Eşleştirdiğiniz desenin denenen desenlere dahil olup olmadığını kontrol edin

    Burada değilse, uygulamanızı INSTALLED_APPSayara dahil etmeyi unutmuş olabilirsiniz (veya içindeki uygulamaların sırasına bakmanız INSTALLED_APPSgerekebilir)

Django Sürümü

Django 1.10'da, bir url'yi python yolu ile tersine çevirme yeteneği kaldırıldı. Bunun yerine adlandırılmış yol kullanılmalıdır.


Sorunu hala bulamıyorsanız, denediklerinizi, araştırdıklarınızı içeren yeni bir soru sormaktan çekinmeyin (Bu soruya bağlantı verebilirsiniz) ve ardından ilgili kodu sorun - eşleştirdiğiniz url, ilgili url kalıpları, hata mesajının django'nun neyi eşleştirmeye çalıştığını gösteren kısmı ve INSTALLED_APPSvarsa ayar.


11
Son olarak,
yinelenen

django 1.10'daki adlandırılmış yolu detaylandırır mısınız?
sage poudel

2
Evet, set app_name in the app's urls.py (e.g. app_name = 'my_app') asıl mesele
CK

Bu canlı regex test cihazını daha yararlı buluyorum: regex101.com
obotezat

NoReverseMatch hakkındaki bu mükemmel eğitim için teşekkür ederiz! Sorunumu çözebildim.
newmachines_xyz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.