Ответ 1
Ошибка NoReverseMatch
говорит о том, что Django не может найти соответствующий шаблон url для URL-адреса, который вы указали в любом из ваших установленных URL-адресов приложения.
Исключение NoReverseMatch создается django.core.urlresolvers, когда соответствующий URL-адрес вашего URL-адреса не может быть идентифицирован на основе предоставленных параметров.
Чтобы начать отладку, вам нужно начать с обращения к сообщению об ошибке, предоставленному вам.
-
NoReverseMatch at/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 в app
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-адреса, которые вы считаете должен соответствовать.
Распространенные ошибки:
-
Совпадение против
.
символ дикой карты или любые другие символы регулярных выраженийНе забудьте избежать определенных символов с префиксом
\
-
Только совпадение с символами нижнего/верхнего регистра
Попробуйте использовать
aZ
или\w
вместоaz
илиAZ
-
-
Убедитесь, что шаблон, который вы используете, включен в шаблоны
Если его здесь нет, то возможно, что вы забыли включить свое приложение в настройку
INSTALLED_APPS
(или, возможно, потребуется заказывать приложения вINSTALLED_APPS
)
Версия Django
В Django 1.10 была удалена возможность обратного преобразования URL-адреса по пути python. Вместо этого следует использовать именованный путь.
Если вы по-прежнему не можете отследить проблему, то не стесняйтесь задавать новый вопрос, который включает в себя то, что вы пробовали, что вы исследовали (вы можете ссылаться на этот вопрос), а затем включить соответствующий код в проблема - соответствующий URL-адрес, любые соответствующие шаблоны URL-адресов, часть сообщения об ошибке, показывающая, что пытались выполнить django, и, возможно, параметр INSTALLED_APPS
если это применимо.