Сайт Димы Джуса / блог / записи с тегом «Django» /

Django 1.0 диплоймент

Ну чё, капчу написал, на серваке всё новое развернул.

Понадобилось накатить на Djano 1.0 патчи из тикетов #7005, #8600, #8968.

Ещё понадобилось прописать FORCE_SCRIPT_NAME='', потому что resolve() будет возвращать урлы такими, какими бы они были до реврайта на сервере, это важно при использовании lighttpd:

url.rewrite-once = (
            "^(/media.*)$" => "$1",
            "^(/hg/static.*)$" => "$1",
            "^/hg(/?.*)$" => "/hg.fcgi$1",
            "^(/.*)$" => "/django.fcgi$1")

Если FORCE_SCRIPT_NAME не выставить, шаблонный тег {% url %} и декоратор @models.permalink будут возвращать урл вида /django.fcgi/blog/entry/42/, а не /blog/entry/42/.

Комментарии (4)

Django 1.0

На самом деле, сдувать пыль с давно не менявшегося движка я начал ещё в августе, благо Gentoo был даже доступен ебилд для SVN-версии Django. По сути дела, в основном потратил время на подчистку кода, освоение новой системы комментирования и django-tagging.

Читать далее
Комментарии (2)

Очередной римейк этого сайта

Как-то не отметил изменения на этом сайте. Перебрал джанговские шаблоны, переделав всё оформление и макет. Сильно упростил оформление, практически полностью отказался от цвета.

Диффы больше на 2000 строк — в основном с “-”. Удалил все сайдбары и чуть почистил код. Всё так же едет в IE.

Стал использовать больше семантических элементов: хотя бы даже простейшие заголовки <hN>; дополнил уже существовавшие ранее элементы <link> в заголовочной части страниц.

Внедрил пару микроформатов: совсем простой rel-tag для абсолютно всех ссылок-тегов и hCard на страничке автора. В hCard внедрён geo. Микроформаты — это очень интересно, совсем скоро напишу про них подробнее.

Да, я вдруг понял очень хорошую вещь: страницы сайта нужно нумеровать по дате от самой старой записи! Это же гораздо натуральнее, чем традиционный подход, когда текущая страница блога — первая, следующая — вторая и т. д.

Страница почти ничего не теряет, если отключить все стили и изображения — это очень хорошо! Для улучшения индексации и just for fun добавил также «Архив» и (HEY LOOK I'M WEB 2.0!) облачко тегов.

Комментарии (1)

В SQLite нет DROP COLUMN

Сабж.

Запрос вида ALTER TABLE foo_bar DROP COLUMN fro_bong; в SQLite сделать нельзя.

Есть, правда, workaround: можно во временную таблицу сбросить только нужные поля, исходную таблицу уничтожить, а потом пересоздать её из временной с уже удалёнными полями. А ещё есть программка sqlitebrowser, в которой тоже можно удалять поля в таблицах SQLite (наверное, в программе это как раз через временную таблицу и реализовано).

На сайте sqlite.org приведён список того, что есть в стандарте SQL92, но отсутствует в SQLite.

Всё равно его не брошу.

Проблема возникла, когда я захотел вычистить из базы этого блога поля «Категория» (категории не нужны, ибо являются частным случаем тэгов и лишней сущностью) и «Музыка» (осталось со времён X-Post, старого движка этого блога на PHP). В Django нет возможности приводить схему базы данных в соответствие с описаниями моделей в приложениях, можно лишь получать SQL-запросы для создания новой таблицы ($ python manage.py sql appname), так что таблички приходится руками ALTER-ить.

Комментарии (2)

PyTils

Долгое время на месте дат постов здесь выводились фразы, лишь временами верные грамматически, типа «5 недель назад», «1 недель назад», a то и вовсе «2 дней назад». Джанговский фильтр timesince лишь берёт перевод английских «weeks» или «days» из локали системы, где не предусмотрена поддержка падежей.

Органично также смотрятся даты вроде «2 марта» или «15 мая», но фильтр date при передаче F в составе форматирующей строки возвращает имя месяца в именительном падеже без возможности склонения. С днями недели то же самое.

Можно переделать перевод Django на свой лад (там используется gettext), однако есть весьма приятный пакет PyTils для Python, который встраивается в том числе и в Django, предоставляя функции для работы с русским языком.

После установки в Django становится возможным использовать вкусные плюшки. Во-первых, russian-aware фильтры форматирования даты — ru_strftime и ru_strftime_inflected. Такой код:

{{ entry.add_date|ru_strftime:"%d %B" }}

выведет дату в виде «19 марта».

На замену встроенному в Django фильтру timesince приходит distance_of_time:

{{ entry.add_date|distance_of_time }}

выведет дату в виде «5 дней назад».

Есть также славная работа с числами. choose_plural выбирает правильное окончание в зависимости от числа (варианты передаются как для чисел 1, 2, 5):

Всего {{ hits }} запис{{ hits|choose_plural:"ь,и,ей" }}

выведет текст «Всего 5 записей» или «Всего 121 запись».

Есть и несколько других приятных возможностей.

Комментарии
← с. 1 с. 2
Всего 10 записей с тегом «Django»