Ответ 1
Вы уже пытались запустить
manage.py show_urls
после установки django_extensions?
http://vimeo.com/1720508 - смотреть с 06:58.
Это должно дать вам в каком порядке попытку URL-адреса.
Надеюсь, что это поможет
Я разрабатываю приложение django, и со временем URL-адреса выросли. Сейчас у меня их много, и из-за некоторых изменений, которые я сделал, одна точка зрения начала сбой. Когда я пытаюсь GET http://example.com/foo/edit_profile, он должен выполнить функцию просмотра определенного вида X
, но вместо этого она выполняет Y
. Где-то маршрутизация URL-адресов путается, и я не могу понять это. Я использовал метод django.core.urlresolvers.resolve
, чтобы попробовать его из оболочки, и я могу подтвердить, что URL-адрес ошибочно разрешен. Однако я не знаю, как отладить это и определить проблему.
В идеале я бы хотел увидеть что-то вроде "протестированного этого шаблона", "протестировал этот шаблон" и т.д., пока он, наконец, не найдет правильный, и тогда я смогу осмотреться там, где он был разрешен. Я не могу найти ничего подобного.
Разве это не проблема для крупных проектов? Что делают люди?
Обновление
Я знаю, как работает система и как просматривать URL-адреса один за другим. Это то, что я пытаюсь сделать. Этот вопрос в основном требует ярлыка.
Вы уже пытались запустить
manage.py show_urls
после установки django_extensions?
http://vimeo.com/1720508 - смотреть с 06:58.
Это должно дать вам в каком порядке попытку URL-адреса.
Надеюсь, что это поможет
Я бы прокомментировал шаблоны в url.py до тех пор, пока вы не получите ошибку 404 при попытке перейти к foo
. Если этот шаблон является включенным, я бы отложил его и прокомментировал строки в url.py. В конце концов вы точно узнаете, какой шаблон соответствует.
Тогда я бы взял функцию просмотра, которую он вызывает, и жесткий код. Если он использует общий вид или что-то тонкое, я сделаю его максимально очевидным и прямым. В этот момент вы должны знать, какое правило соответствует, и почему и какой код он выполняет в представлении.
Посмотрите на свои urlconfs, найдите, какой urlpattern вызывает ваш взгляд Y, и посмотрите, является ли регулярное выражение более общим, чем должно быть. Попробуйте прокомментировать URL-адрес, который вызывает ложное совпадение, и посмотрите, правильно ли он соответствует X.
Как правило, это не проблема для меня, но это происходит. Всегда сохраняйте более конкретные шаблоны перед общими. Используйте статические префиксы для разделения пространства имен URL-адресов, чтобы избежать ложных совпадений.
Вы можете предположить, что он проходит через urlpatterns сверху вниз, и будет выполнен первый, который будет соответствовать.
Как вы знаете, какое представление выполнено (Y
), подумайте об этом:
Y
до X
: шаблоны Y соответствуют URL-адресу (но не должны)X
до Y
: шаблоны X не соответствуют URL (но должны)Можете ли вы предоставить более явные примеры вашего URLConf? Чем я могу дать вам более ясный ответ.