Подтвердить что ты не робот

Отладчик URL-адреса Django

Я разрабатываю приложение django, и со временем URL-адреса выросли. Сейчас у меня их много, и из-за некоторых изменений, которые я сделал, одна точка зрения начала сбой. Когда я пытаюсь GET http://example.com/foo/edit_profile, он должен выполнить функцию просмотра определенного вида X, но вместо этого она выполняет Y. Где-то маршрутизация URL-адресов путается, и я не могу понять это. Я использовал метод django.core.urlresolvers.resolve, чтобы попробовать его из оболочки, и я могу подтвердить, что URL-адрес ошибочно разрешен. Однако я не знаю, как отладить это и определить проблему.

В идеале я бы хотел увидеть что-то вроде "протестированного этого шаблона", "протестировал этот шаблон" и т.д., пока он, наконец, не найдет правильный, и тогда я смогу осмотреться там, где он был разрешен. Я не могу найти ничего подобного.

Разве это не проблема для крупных проектов? Что делают люди?

Обновление

Я знаю, как работает система и как просматривать URL-адреса один за другим. Это то, что я пытаюсь сделать. Этот вопрос в основном требует ярлыка.

4b9b3361

Ответ 1

Вы уже пытались запустить

manage.py show_urls

после установки django_extensions?

http://vimeo.com/1720508 - смотреть с 06:58.

Это должно дать вам в каком порядке попытку URL-адреса.

Надеюсь, что это поможет

Ответ 2

Я бы прокомментировал шаблоны в url.py до тех пор, пока вы не получите ошибку 404 при попытке перейти к foo. Если этот шаблон является включенным, я бы отложил его и прокомментировал строки в url.py. В конце концов вы точно узнаете, какой шаблон соответствует.

Тогда я бы взял функцию просмотра, которую он вызывает, и жесткий код. Если он использует общий вид или что-то тонкое, я сделаю его максимально очевидным и прямым. В этот момент вы должны знать, какое правило соответствует, и почему и какой код он выполняет в представлении.

Ответ 3

Посмотрите на свои urlconfs, найдите, какой urlpattern вызывает ваш взгляд Y, и посмотрите, является ли регулярное выражение более общим, чем должно быть. Попробуйте прокомментировать URL-адрес, который вызывает ложное совпадение, и посмотрите, правильно ли он соответствует X.

Как правило, это не проблема для меня, но это происходит. Всегда сохраняйте более конкретные шаблоны перед общими. Используйте статические префиксы для разделения пространства имен URL-адресов, чтобы избежать ложных совпадений.

Ответ 4

Вы можете предположить, что он проходит через urlpatterns сверху вниз, и будет выполнен первый, который будет соответствовать.

Как вы знаете, какое представление выполнено (Y), подумайте об этом:

  • если Y до X: шаблоны Y соответствуют URL-адресу (но не должны)
  • если X до Y: шаблоны X не соответствуют URL (но должны)

Можете ли вы предоставить более явные примеры вашего URLConf? Чем я могу дать вам более ясный ответ.