Відповіді:
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-адресою пітона була видалена. Натомість слід використовувати названий шлях.
Якщо ви все ще не можете віднайти проблему, не соромтеся задати нове запитання, що включає те, що ви спробували, що ви дослідили (Ви можете зв’язати це питання), а потім додайте відповідний код до issue - 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
- це не особливість Джанго, це не дасть відповіді на питання.