Django URL-отладчик - PullRequest
       11

Django URL-отладчик

25 голосов
/ 01 сентября 2010

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

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

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

Обновление

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

Ответы [ 4 ]

29 голосов
/ 30 декабря 2010

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

manage.py show_urls

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

http://vimeo.com/1720508 - часы с 06:58.

Это должно дать вам информацию о том, в каком порядке предпринимается попытка разрешения URL.

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

4 голосов
/ 21 октября 2010

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

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

1 голос
/ 01 сентября 2010

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

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

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

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

0 голосов
/ 01 сентября 2010

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

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

...