Что такое ошибка NoReverseMatch и как ее исправить?
У меня есть некоторый код, и когда он выполняется, он бросает NoReverseMatch, говоря:
NoReverseMatch в /my_url / Reverse для 'my_url_name' с аргументами '() 'и аргументами ключевого слова' {} ' не найден. Н шаблон(ы) попробовал: []
Что это значит, и что я могу поделать?
2 ответа:
The
NoReverseMatch
ошибка говорит, что Django не может найти соответствующий шаблон url для url, который вы предоставили в любом из URL-адресов вашего установленного приложения.исключение NoReverseMatch вызывается django.ядро.urlresolvers, когда соответствующий URL-адрес в URL-конфигурации не могут быть определены на основании параметров, указанных.
чтобы начать отладку, вам нужно начать с удаления сообщения об ошибке, приведенного в вы.
NoReverseMatch at /my_url/
это url-адрес, который в настоящее время отображается, именно этот url-адрес, который ваше приложение в настоящее время пытается получить доступ, но он содержит url-адрес, который не может быть сопоставлен
обратный для my_url_name'
это имя url-адреса, который он не может найти
с аргументами '()' и
это не ключевое слово аргументы его предоставления в url
ключевые аргументы '{}' не найден.
это ключевые аргументы, которые он предоставляет url
Н шаблон(ы) попробовал: []
это шаблоны, которые он смог найти в вашем 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-адреса в поле regex вверху, а затем используйте текстовую область для включения любых URL-адресов, которые, по вашему мнению, должны совпадать.
Распространенные Ошибки:
совпадение с
.
символ дикой карты или любой другой символы регулярных выраженийне забудьте избежать конкретных символов с
\
префикстолько совпадение с нижним / верхним регистром символов
попробуйте использовать либо
a-Z
или\w
вместоa-z
илиA-Z
проверьте, что шаблон, которому вы соответствуете, включен в шаблоны, которые вы пробовали
если его здесь нет, то возможно, что вы забыли включите ваше приложение в
INSTALLED_APPS
настройка (или порядок приложений в пределахINSTALLED_APPS
может понадобиться посмотреть)Версия Django
в Django 1.10 была удалена возможность изменить url-адрес по пути python. Вместо этого следует использовать именованный путь.
если вы все еще не можете отследить проблему, то не стесняйтесь задавать новый вопрос, который включает в себя то, что вы пробовали, что вы исследовали (вы можете ссылаться на это вопрос), а затем включите соответствующий код в проблему-url, который вы сопоставляете, любые соответствующие шаблоны url, часть сообщения об ошибке, которая показывает, что django пытался сопоставить, и, возможно,
INSTALLED_APPS
настройки если это применимо.
вы видите эту ошибку, потому что вы используете версию 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