Ответы:
NoReverseMatch
Ошибка говорит , что Джанго не может найти шаблон соответствия 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
. Опять же, это, вероятно, место, которое вы недавно изменили.
Теперь, когда вы обнаружили, где возникла ошибка, используйте другие части сообщения об ошибке, чтобы решить проблему.
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
параметр, если это применимо.
set app_name in the app's urls.py (e.g. app_name = 'my_app')
том-то и дело
И убедитесь, что ваш маршрут в списке маршрутов:
./manage.py show_urls | grep path_or_name
show_urls
не является функцией Django, это не ответит на вопрос.