Categories: , ,
Posted by: buriy
Внезапно, глядя на сообщение Vadim Fint в группе django-russian про опыт использования джанго в большом проекте, написал ответ про мой опыт использования Django и мои решения.
Итак, начнём.
1) Конфигурация.
1.1) Подключение мелких компонент.
Использую симлинки. Потому что virtualenv ещё хуже, поддержка используемых несколькими проектами плагинов превращается в пытку.
1.2) Отсутствие модульной настройки приложений.
Всё планирую заточить для себя
http://github.com/jabapyth/django-appsettings , да никак руки не
доходят.
1.3) Отсутствие настройки media для приложений.
1.4) Отсутствие точек подключения в шаблонах. Есть
http://code.google.com/p/django-app-plugins/ , но они какие-то
дурацкие, потому что очевидно, что для extension_point нужно писать вьюшку, а не шаблон.
 continue reading
Categories: , ,
Posted by: buriy

Привет всем, в кои-то веки сподобился написать о Django.

Причём не общий пост, а решение конкретной мелкой задачки.

Итак, задача: Нужно ограничить количество записей в InlineModelAdmin.

Решение: По историческим причинам, иерархия классов в Django сильно различается для ModelAdmin и InlineModelAdmin:

Model <-(has)<- ModelAdmin ->(has)-> queryset

, но

Model <-(has)<- InlineModelAdmin ->(has)->
-> formset = BaseInlineFormSet ->(has)-> get_queryset

Итого:

class MyBaseInlineFormSet(BaseInlineFormSet):
    def get_queryset(self):
        sup = super(MyBaseInlineFormSet, self).get_queryset()
        return sup.order_by('-id')[:5]

reg_inline(A, B, formset = MyBaseInlineFormSet, extra = 5)

Где reg_inline это упрощенный способ сделать site.register с помощью моего http://github.com/buriy/django-superadmin

Categories:
Posted by: buriy

Уважаемые товарищи python-девелоперы,

Eсли кто не знает, или не помнит, или не задумывался об этом.

Если вы хотите обернуть внутреннюю ошибку в новое исключение (“сделать reraise”), например, в таком коде:

try:
    do_something()
except Exception, e:
    raise e

То внутренние фреймы стека у вас забудутся, первым фреймом будет строчка с raise e

Если вы не хотите терять внутренние фреймы, пишите так:

 continue reading
Categories: , ,
Posted by: buriy
Cool bookmarklet to find other person urls from current page:
javascript:document.location="http://socialgraph-resources.googlecode.com/svn/trunk/samples/findyours.html?q="+document.location
Categories:
Posted by: buriy
Ввиду нетривиальности действий, публикую рецепт.
 continue reading
Categories: ,
Posted by: buriy
Я постепенно мигрирую на git. За последнее время я избавился практически от всех своих svn репозиториев, и перевел половину bzr репозиториев на git.
Список преимуществ и недостатков git расписывать не буду, скажу только о том, что мне больше всего льстит в последнее время: это git для django.
 continue reading
Categories: ,
Posted by: buriy
Привет всем, давненько я не писал.
Пусть на улице снова снег, но это всё же весна, и душа требует перемен.
Поэтому я наконец-то сменил движок сайта на byteflow blog engine.
Теперь здесь есть древовидные комментарии, уведомления по почте, антиспам, пингбэки, трэкбэки, фиды по темам, openid-логины, кросспост в жж. Кажется, больше ничего нет. Кажется :)
Короче, то, что наколенный блог никогда не будет иметь.

А ещё, сегодня я думал о web-4.0.  continue reading
Categories: ,
Posted by: buriy
Принял эстафету от FX Poster’а.
Долго колебался, т.к. не люблю писать про такие вещи, но вдруг кому поможет :)
 continue reading
Categories: , , ,
Posted by: buriy
Вспоминаю, что когда-то я обещал писать про django.
Сегодняшняя тема — эволюция баз данных для django.
Я — один из двух создателей deseb.
deseb — это Django External Schema Evolution Branch, то есть инструмент для эволюции баз данных для django. Да, юные любители ruby on rails, это практически ваши миграции, только с более простым DSL и конструирующиеся автоматически по изменениям модели.
Ну а тем, кто с rails не знаком, расскажу поподробнее.
 continue reading
Categories: , ,
Posted by: buriy
Оказывается, svn всё-таки позволяет настраивать список игнорируемых масок файлов для проекта в целом! Правда, в документации гораздо более подробно описывается, как настроить global-ignore — т.е. ignore файлов по маске для пользователя (!) и для всех пользователей текущей машины (!!!). Описано и свойство svn:ignore для каталога с файлами.
Вот эта опция для проекта:
 continue reading