среда, 26 августа 2009 г.

Визуализация моделей в Django

На определенном этапе разработки сайтов на Django встала необходимость визуализировать модели и связи между ними - держать все в голове стало сложно.
Погуглил и решил что на данном этапе меня вполне устроят возможности django_extensions.
В базовые возможности данного приложение входит команда graph_models из модуля GraphModels.
Но обо всем по-порядку: У данного приложения есть зависимости поэтому в начале нужно установить pygraphviz
В gentoo я это делаю так:
$ emerge dev-python/pygraphviz
хотя вполне можно обойтись универсальным методом:
$ easy_install pygraphviz
Далее нужно установить django_extensions Можно установить его стандартно: $ cd django-command-extensions
$ python setup.py install
Но я предпочитаю, чтобы все от чего зависит проект было вместе с проектом, поэтому я поступаю так:

$ cd project_root
$ hg clone http://hgsvn.trbs.net/django-command-extensions/django_extensions
Далее стандартно добавляю django_extensions к списку установленных приложений:
INSTALLED_APPS += ('django_extensions',)
Все! Приложение можно использовать с данными Вашего проекта.
Все возможности его я описать не в состоянии, тема данного поста команда graph_models.
Собственно это дополнительная команда для manage.py, т.е. ее нужно запускать в командной строке как syncdb или runserver
Из всех возможностей синтаксиса данной команды я вынес для себя следующие варианты использования:
1. Вывод диаграммы всех установленных приложений:
$ python manage.py graph_models -o models_diagramm.png
Ключ -o означает в какой файл выводить.
2. То же самое, но с группировкой по приложениям - таблицы будут не перемешаны как попало, а сгруппированы по принадлежности к приложениям красивой рамочкой.
$ python manage.py graph_models -g -o models_diagramm.png
3. Когда проекты достаточно большие вывод всех моделей понимания не вносит, поэтому есть возможность заказать себе на вывод только те приложения которые интересуют в данный момент:
$ python manage.py graph_models -g -o models_diagramm.png polls
В конец команды можно дописывать через пробел имена именно тех приложений, которые интересуют.
Если не использовать ключ -o будет генерироваться .dot файл, что с ним делать потом я не разобрался :) Было бы интересно найти никсовую программу которая бы позволяла вносить дополнительные комментарии, двигать блоки так как удобно, кастомизировать цвета вывода...
P.S. Примеры вывода смотреть на официальной странице.

Я - хороший PHP-программист :)

Прошел тест!

Аж стыдно!

среда, 1 октября 2008 г.

Подсветка кода

Задался таки вопросом подсветки кода.
Код для теста:

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()

Быстро погуглив нашел рецепт: http://blogohelp.blogspot.com/2008/08/bloggercom.html
В котором описано, что нужно использовать утилиту Ивана Сагалаева highlight.js, вообще я о ней сразу вспомнил как только задался вопросом подсветки кода, но не знал как прикрутить эту утилиту в blogger. Там довольно странно дан совет использовать в качестве исходника утилиты файл highlight.js прямо с блога автора. Так делать НЕ нужно!
Я развернул библиотеку скрипта на одном из своих проектов и загружаю от туда, так как загрузить обычные файлы в blogger способа не нашел.
Как пользоваться утилитой читайте на сайте автора.
Как прикрутить ее в blogger описано у blogohelp. Просто в разделе управления блогом открываем вкладку «Макет» далее «Изменить HTML» и вставляем между <head> и </head> строки линкования и инициализации скрипта.
Единственное, нигде явно не указано (а для меня почемуто было не очевидно), что еще к странице нужно прилинковать файл css с теми стилями, которые вы хотите использовать, что прописывается тоже в заголовочной части макета.

<link href="js/highlight/styles/default.css" 
rel="stylesheet" type="text/css" />

PS: В начале не работало, когда в настройках было выставлено менять каждый перенос строк на тег br, что соответственно рвало код.

Старт

Многие ведут блоги...
Давно хотелось быть как все :)
После перебора массы вариантов (livejournal, wordpress, самому написать), решил завести аккаунт здесь. Не нужно трать много времени на создание, искать хостинг для установки движка, и как-то тут красивше чем livejournal (это конечно субъективно). К томуже данный сервис предоставляет OpenID, связан с picasa, наверное и календарь сюда можно интегрировать - еще не разобрался. Короче - много вкусностей.
Но главное с минимумом усилий позволяет делать главное - вести блог. Этим и займусь. Посты будут в основном содержания: программисстского (python, Django), филосовского (за жизнь). Моих мнений и суждений будет меньше (это точно никому не интересно).

ЗЫ: А интересно код он (blogger) подсвечивать умеет?