Записи по категории “HowTo”.

Code completition для django проекта

PyDev поддерживает codecompletition, правда у меня на некоторых машинах так и не удалось заставить его заставить распознать и подключить. Но наверно своя машина ближе.

Описываю как я подключал на своем Mac. По аналогии делается и на Windows машинах.

1. В Preferences эклипса есть раздел PyDev, внутри него таится Interpreter – Python. Что необходимо сделать это указать путь до вашего интерпретатора. Дальше он сам определит какие пакеты находятся в PYTHONPATH.

2. Открываете Preferences своего Django проекта. Чтобы заставить PyDev понимать его исходники как пакеты, достаточно выбрать в PyDev – PYTHONPATH Project Source Folders.

3. Чтобы наверняка в External Source Folders заносим путь до django директории.

Результат вот:

Отладка Django приложений в PyDev Eclipse

У меня получилось задебажить свое django приложение в Eclipse. И поэтому делюсь опытом с вами.

Что нам необходимо?

1. Среда разработки – Eclipse
2. Web framework – Django
3. Psyco
4. PyDev

Что нам нужно сделать?

1. Запустить Eclipse. Ставить PyDev рассказывать не буду и уж точно как django подымать у меня для вас язык не подвернется сказать. Дальнейшее рассказывается только с учетом того, что вы поставили все 4 компоненты и имеете уже созданный в Эклипсе проект

2. В меню Eclipse выбираем Run и Open Run Dialog…

3. Создаем новую конфигурацию Python Run. Называем ее как угодно, на рисунке у меня изображена пустая форма.

4. Вам необходимо заполнить диалог значениями. На рисунке пример рабочей конфигурации.

Но это не все, переходим на вкладку Arguments и вводим в поле Program arguments вот такую строку

runserver –noreload

Кто работает с django поймет что если нажать run то это будет эквивалентно manage.py runserver –noreload в командной строке, аля терминале ну или консоли (кому как нравится, я лично называю это консолью или терминалом) Жмем Run чтобы убедиться что все сделали правильно.

Все гуд и теперь смело можем открывать в браузере localhost:8000 и работать с проектом.

Но мы ведь не для того начали всю эту пляску. Мы хотим нормально работающий дебаггер. Поэтому продолжим. Что нам для этого надо? Объясняю как я вышел на дебаг. Логика простая. Если запускается сервер то должен запускаться и дебаггер. Хех. Жму в меню Run -> Open Debug Dialog… и выбираю созданную конфигурацию, Debug, облом…

Psyco not available for debugger speedups

Ну видимо PyDev уже позаботился о нас и поддерживает какой-то пакет, который по каким-то причинам не доступен. Если вы скачали уже его, то поставьте. Как ставить? На ваших плечах, у меня на Mac OS X я успешно скомпилил пакет и установил. Чего и вам советую. Простите меня, пользователи Windows =)

После всех мучений с установкой psyco, открываем manage.py нашего проекта и делаем воот такие изменения в нем

  1. #!/usr/bin/env python
  2. from django.core.management import execute_manager
  3. try:
  4.     import settings # Assumed to be in the same directory.
  5. except ImportError:
  6.     import sys
  7.     sys.stderr.write("Error: Can’t find the file ’settings.py’ in the directory containing %r. " +
  8.                      "It appears you’ve customized things.\nYou’ll have to run django-admin.py, " +
  9.                      "passing it your settings module.\n(If the file settings.py does indeed exist, "+
  10.                      "it’s causing an ImportError somehow.)\n" % __file__)
  11.     sys.exit(1)
  12.  
  13. if __name__ == "__main__":
  14.     import psyco
  15.     psyco.full()
  16.     execute_manager(settings)

Теперь запускаем дебагер и вуаля, без ошибок, ставим куда нить breakpoint и перезапускаем сервер. Открываем браузер, заходим на localhost:8000 и если все получилось удачно, то нас Eclipse спросит: ”А не открыть ли нам Debug перспективу?”

Какие минусы я заметил,

1. Во время сессии нельзя поставить новый брекпойнт, для это придется перезапускать консоль.
2. При таком подходе вы не сможете стартовать приложение из нормальной консоли. Чтобы это сделать, вам придется убрать те самые заветные две строки.

Остальное меня вполне устроило.