Что такое ошибка NoReverseMatch и как ее исправить?

У меня есть некоторый код, и когда он выполняется, он выдает NoReverseMatch, говоря:

NoReverseMatch в / my_url / Обратный для 'my_url_name' с аргументами '()' и ключевыми словами аргументы '{}' не найдены. n шаблонов попытались: []

Что это значит, и что я могу с этим поделать?

Ответы на вопрос(3)

./manage.py show_urls | grep path_or_name
 Daniil Mashkin28 мар. 2019 г., 11:42
 Urda27 мар. 2019 г., 23:39
-1show_urls это не функция Django, это не ответит на вопрос.

потому что вы используете версию django меньше, чем django 1.11. Попробуйте обновить версию django, и ошибка будет исправлена.

Использование:

pip install --upgrade django==1.11

Рекомендации:https://docs.djangoproject.com/en/2.0/releases/1.11/#whats-new-1-11

 holms12 мар. 2018 г., 10:34
Ничего для меня не решило
 Hardik Gajjar21 мая 2019 г., 08:29
это не правильное решение. Это может вызвать сбой системы.
 Iyanuoluwa Ajao13 мар. 2018 г., 10:33
Это решило мою проблему. Я использовал Django 1.10 для конкретного проекта, и всегда возникала ошибка NoReverseMatch. Если честно, я не знаю, как это решило проблему, но это точно
Решение Вопроса

NoReverseMatch ошибка говорит о том, что Django не может найти соответствующий шаблон URL для URL, который вы указали в URL любого из ваших установленных приложений.

Исключение NoReverseMatch вызывается django.core.urlresolvers, когда не удается идентифицировать соответствующий URL в вашем URLconf на основе предоставленных параметров.

Чтобы начать отладку, вам нужно начать с удаления сообщения об ошибке, которое вы получили.

NoReverseMatch в / my_url /

Это URL, который в данный момент отображается, именно этот URL пытается получить доступ к вашему приложению, но он содержит URL, который не может быть сопоставлен

Реверс для 'my_url_name'

Это имя URL, который он не может найти

с аргументами '()' и

Это аргументы без ключевых слов, которые он предоставляет URL

Аргументы ключевого слова '{}' не найдены.

Это ключевые аргументы, которые он предоставляет URL

n шаблонов попытались: []

Это шаблоны, которые он смог найти в ваших файлах urls.py, с которыми он пытался сопоставить

Начните с поиска в исходном коде кода, относящегося к отображаемому в настоящее время URL-адресу - URL-адресу, представлению и любым используемым шаблонам. В большинстве случаев это будет частью кода, который вы сейчас разрабатываете.

Как только вы это сделаете, прочитайте код в том порядке, в котором будет следовать django, пока не дойдете до строки кода, которая пытается создать URL для вашегоmy_url_name, Опять же, это, вероятно, в месте, которое вы недавно изменили.

Теперь, когда вы обнаружили, где происходит ошибка, используйте другие части сообщения об ошибке, чтобы решить проблему.

Название URLЕсть ли опечатки?Вы предоставили URL, который пытаетесь получить доступ к данному имени?Если вы установили app_name в приложенииurls.py (например.app_name = 'my_app') или если вы включили приложение в пространство имен (например,include('myapp.urls', namespace='myapp')тогда вам нужно включить пространство имен при реверсировании, например,{% url 'myapp:my_url_name' %} или жеreverse('myapp:my_url_name').Аргументы и ключевые слова Аргументы

Аргументы и ключевые аргументы используются для сопоставления с любыми группами захвата, присутствующими в данном URL, которые могут быть идентифицированы окружающими.() скобки в шаблоне URL.

Предполагая, что URL-адрес, который вы сопоставляете, требует дополнительных аргументов, посмотрите в сообщении об ошибке и сначала посмотрите, не является ли значение для указанных аргументов правильным.

Если они не верны:

Значение отсутствует или пустая строка

Обычно это означает, что передаваемое вами значение не содержит ожидаемого значения. Посмотрите, где вы назначаете значение для него, устанавливаете точки останова, и вам нужно выяснить, почему это значение не проходит правильно.

Ключевое слово аргумент содержит опечатку

Исправьте это либо в шаблоне URL, либо в URL, который вы создаете.

Если они верны:

Отладить регулярное выражение

Вы можете использовать веб-сайт, такой какRegExr чтобы быстро проверить, соответствует ли ваш шаблон URL-адресу, который, как вы думаете, вы создаете, скопируйте шаблон URL-адреса в поле регулярных выражений вверху, а затем используйте текстовую область, чтобы включить любые URL-адреса, с которыми, по вашему мнению, он должен соответствовать.

Распространенные ошибки:

Сопоставление с. подстановочный знак или любые другие символы регулярного выражения

Не забудьте экранировать определенные символы с\ префикс

Соответствует только символам нижнего / верхнего регистра

Попробуйте использовать либоa-Z или же\w вместоa-z или жеA-Z

Убедитесь, что шаблон, который вы подходите, включен в шаблоны

Если его здесь нет, возможно, вы забыли включить свое приложение вINSTALLED_APPS настройка (или порядок приложений вINSTALLED_APPS возможно, нужно смотреть)

Джанго версия

В Django 1.10 была удалена возможность изменить URL-адрес по его пути в Python. Вместо этого следует использовать именованный путь.

Если вы по-прежнему не можете отследить проблему, то не стесняйтесь задавать новый вопрос, который включает в себя то, что вы пробовали, что вы исследовали (вы можете дать ссылку на этот вопрос), а затем включить соответствующий код в проблема - соответствующий URL, любые соответствующие шаблоны URL, часть сообщения об ошибке, которая показывает, что django пытался найти, и, возможно,INSTALLED_APPS настройка, если применимо.

 sage poudel27 апр. 2018 г., 13:46
Можете ли вы рассказать о названном пути в Django 1.10?
 C.K.20 мар. 2019 г., 04:32
Да,set app_name in the app's urls.py (e.g. app_name = 'my_app')  это точка
 e4c515 июл. 2016 г., 09:26
Наконец, у нас есть канонический ответ, который мы можем предоставить как цель dup

Ваш ответ на вопрос