Odpowiedzi:
NoReverseMatch
Błędu mówiąc, że Django nie można znaleźć wzór pasujący URL url masz przewidzianego w którymkolwiek z adresów URL zainstalowanych aplikacji.
Wyjątek NoReverseMatch jest zgłaszany przez django.core.urlresolvers, gdy nie można zidentyfikować pasującego adresu URL w konfiguracji adresu URL na podstawie podanych parametrów.
Aby rozpocząć debugowanie, musisz zacząć od sprawdzenia otrzymanego komunikatu o błędzie.
NoReverseMatch pod adresem / my_url /
To jest aktualnie renderowany adres URL, jest to adres URL, do którego aplikacja próbuje uzyskać dostęp, ale zawiera adres URL, którego nie można dopasować
Odwróć dla „my_url_name”
To jest nazwa adresu URL, którego nie może znaleźć
z argumentami „()” i
To są argumenty niebędące słowami kluczowymi, które dostarcza do adresu URL
Nie znaleziono argumentów słów kluczowych „{}”.
To są argumenty słów kluczowych, które dostarcza do adresu URL
n wypróbowanych wzorów: []
Oto wzorce, które udało mu się znaleźć w plikach urls.py, z którymi próbował dopasować
Zacznij od zlokalizowania kodu w źródle odpowiedniego dla aktualnie renderowanego adresu URL - adresu URL, widoku i wszelkich powiązanych szablonów. W większości przypadków będzie to część kodu, nad którą obecnie pracujesz.
Gdy już to zrobisz, przeczytaj kod w kolejności, w jakiej django będzie podążać, aż dojdziesz do wiersza kodu, który próbuje utworzyć adres URL dla twojego my_url_name
. Ponownie, jest to prawdopodobnie miejsce, które niedawno zmieniłeś.
Teraz, gdy już wiesz, gdzie występuje błąd, użyj innych części komunikatu o błędzie, aby rozwiązać problem.
urls.py
(np. app_name = 'my_app'
) Lub jeśli dołączyłeś aplikację z przestrzenią nazw (np. include('myapp.urls', namespace='myapp')
Wtedy musisz uwzględnić przestrzeń nazw podczas cofania, np . {% url 'myapp:my_url_name' %}
Lub reverse('myapp:my_url_name')
.Argumenty i argumenty słów kluczowych są używane w celu dopasowania do wszelkich grup przechwytywania, które są obecne w podanym adresie URL, które można zidentyfikować za pomocą otaczających ()
nawiasów we wzorcu adresu URL.
Zakładając, że pasujący adres URL wymaga dodatkowych argumentów, spójrz na komunikat o błędzie i najpierw sprawdź, czy wartości podanych argumentów wyglądają na poprawne.
Jeśli nie są poprawne:
Brak wartości lub pusty ciąg
Zwykle oznacza to, że wartość, którą przekazujesz, nie zawiera wartości, której się spodziewasz. Przyjrzyj się, gdzie przypisujesz jej wartość, ustaw punkty przerwania, a będziesz musiał dowiedzieć się, dlaczego ta wartość nie jest poprawnie przekazywana.
Argument słowa kluczowego zawiera literówkę
Popraw to we wzorcu adresu URL lub w konstruowanym adresie URL.
Jeśli są poprawne:
Debuguj wyrażenie regularne
Możesz użyć strony internetowej, takiej jak regexr, aby szybko sprawdzić, czy wzorzec pasuje do adresu URL, który Twoim zdaniem tworzysz, Skopiuj wzorzec adresu URL do pola wyrażenia regularnego u góry, a następnie użyj obszaru tekstowego, aby uwzględnić adresy URL, które uważasz za stosowne powinien pasować do.
Typowe błędy:
Dopasowanie do .
znaku wieloznacznego lub innych znaków wyrażenia regularnego
Pamiętaj, aby uciec przed określonymi znakami \
przedrostkiem
Dopasowywanie tylko do małych / dużych liter
Spróbuj użyć albo a-Z
albo \w
zamiast a-z
alboA-Z
Sprawdź, czy pasujący wzorzec znajduje się w wypróbowanych wzorcach
Jeśli go tu nie ma, możliwe, że zapomniałeś uwzględnić swoją aplikację w INSTALLED_APPS
ustawieniach (lub kolejność aplikacji INSTALLED_APPS
może wymagać sprawdzenia)
W Django 1.10 usunięto możliwość odwrócenia adresu URL za pomocą jego ścieżki w języku Python. Zamiast tego należy użyć nazwanej ścieżki.
Jeśli nadal nie jesteś w stanie wyśledzić problemu, możesz zadać nowe pytanie, które zawiera informacje o tym, co próbowałeś, czego szukałeś (możesz zamieścić link do tego pytania), a następnie dołączyć odpowiedni kod do problem - adres URL, który dopasowujesz, wszelkie odpowiednie wzorce adresów URL, część komunikatu o błędzie, która pokazuje, co django próbował dopasować i prawdopodobnie INSTALLED_APPS
ustawienie, jeśli ma zastosowanie.
set app_name in the app's urls.py (e.g. app_name = 'my_app')
to chodzi
I upewnij się, że Twoja trasa znajduje się na liście tras:
./manage.py show_urls | grep path_or_name
show_urls
nie jest funkcją Django, to nie odpowie na pytanie.