Не помню кто, но кто-то точно :), утверждал, что джанго - платформа для создания собственного блога. Пишу на джанго уже 2 года, а про блоги на ней (на нем?) задумался только сейчас. Мой блог на blogger’е и это дает определенные преимущества в скорости индексации и pr блога.
Естественно, у платформы “специально для блогов” должно быть куча готовых решений. В принципе так и есть, но на все у меня, как всегда, не хватит ни сил, ни терпения, поэтому в обзор войдет только те, которые обновлялись не поздней чем месяц назад.
Итак, 3 pluggable приложения на django для создания блога:
- django-diario,
- blogmaker – UPD: не подходит, т.к. не обновлялся давно,
- django-basic-apps.blog (кусок pinax’а).
UPD: честно признаюсь, я забыл про byteflow напрочь, когда садился это писать. Только по этому byteflow и нет в данном посте, но думаю, про него итак достаточно написано.
Смотрю на каждое из приложений впервые, потому претендовать на абсолютную достоверность обзора не планирую. Как всегда, обзор будет более эмоционален и субъективен, чем нужно :). Комментарии приветствуются. Дельных комментаторов буду поощрять ссылкой с 10 своих сайтов на их ресурс (кому не нужны 10 обратных ссылок?).
django-diario
Не смотря на растущую популярность github’а хоститься на code.google.com - http://code.google.com/p/django-diario/. Актуальная версия (на момент написания) - 0.2, выпущенная 13th December 2008, но кому нужен релиз? Берем транк, который обновлялся 20 октября 2009 (опять же на момент написания - далее нмн). И сразу первая радость – в репозитории рядом с приложением лежит каталог examples, а в нем basic_blog.
Идем в каталог с basic_blog примером, запускаем
manage.py syncdb
Запускаем тестовый сервер, радуемся.
Скрин 1 – главная страница basic_blog’а
Скрин 2 – Админка basic_blog’а
Идем в пункт админки Entries и добавляем новый пост – ссылка Add entry.
Скрин 3 – Пункт админки “Создание нового поста” в basic_blog’а
Не густо. Одна надежда на пунктик “Advanced options”, который по умолчанию свернут. Жмем.
Скрин 4 – Подпункт “Advanced options” в пункте админки “Создание нового поста” в basic_blog’а, в доме который построил Джек.
Оказывается, тут скрывалась опция разметки для поста. Кстати наличие тут textile, например, не связано с наличием Python textile library у вас на компе. Теперь, кстати есть смысл ещё раз посмотреть на пункт админки “Entries”.
Скрин 5 – Пункт админки Entries в basic_blog’а
Комментарии излишни.
Главная страница блога теперь выглядит так:
Скрин 6 – снова главная страница в basic_blog’а, но теперь на ней есть пост.
Главная страница пока мало отличается от Weblog (ссылка вверху страницы) и страницы самого поста.
Так как я в принципе не владею ни одной из данных разметок (кроме HTML, который и есть Raw text в соответствии с подсказкой к полю Markup language), текст у меня получился без абзацев.
Придется лезть в документацию и исходники, т.к. увиденное не впечатляет. Из документации выясняется, что diary распространяется под LGPLv3 и сопровождена весьма не плохо документацией. Например, в файле install.txt описан процесс подключения RSS-фидов.
В urls.py нужно добавить:
from diario.feeds.entries import RssEntriesFeed, AtomEntriesFeed
entries_feeds = {
'rss': RssEntriesFeed,
'atom': AtomEntriesFeed,
}
urlpatterns = patterns(
...
(r'^blog/(?P<url>(rss|atom))/$', 'django.contrib.syndication.views.feed', {'feed_dict': entries_feeds}),
)
Попробуем. Идем в urls.py и обнаруживаем, что оно уже подключено!
Скрин 7 – RSS-фид basic_blog’а.
Ну тогда попробуем подключить фичу с тэгами в блоге (тоже описана в install.txt). Идем в urls.py и добавляем
(r'^weblog/tag/', include('diario.urls.tagged'))
а заодно и подсмотренная чуть позже
(r'^weblog/tag/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': entries_by_tag_feeds}),
- дял рсс фидов по тэгам. Строки
entries_by_tag_feeds = {
'rss': RssEntriesByTagFeed,
'atom': AtomEntriesByTagFeed,
}
уже почему-то добавлены. Ах да, в basic_blog’е в настройках не подключено приложение 'tagging' (пункт INSTALLED_APPS), а потому придется после его подключения пересоздать базу. Почле чего, ниже поля Body в редактировании поста (в админке) появиться поле Tags.
После произведенных манипуляций должна заработать возможность отбора записей по тэгам и генерация рсс фидов по тэгаи, правда перед этим вам ещё нужно создать шаблон entry_list_tagged.html – лично я на этом спекся (итак ясно, что получится, так зачем время тратить).
Процесс подключения комментарием очень похож на процесс подключения тэгов.
- Добавляем ‘django.contrib.comments’ в INSTALLED_APPS
- Добавляем в url.py
from diario.feeds.comments import RssCommentsFeed as RssWeblogCommentsFeed
from diario.feeds.comments import AtomCommentsFeed as AtomWeblogCommentsFeed
blog_comments_feeds = {
'rss': RssWeblogCommentsFeed,
'atom': AtomWeblogCommentsFeed,
}
urlpatterns = patterns(
...
(r'^blog/comments/(?P<url>(rss|atom))/$', 'django.contrib.syndication.views.feed', {'feed_dict': blog_comments_feeds}),
)
И наслаждаемся, если конечно не придется создавать шаблоны и пересоздавать базу :).
Так как diario использует django.contrib.sitemaps приводить тут процесс добавления карты сайта не уместно, пост все-таки не про контриб sitemaps.
Заключение
django-diario – прекрасная основа дял создания собственного блога. Берешь, изменяешь, добавляешь свое и радуешься жизни – минимум геморроя, максимум фана. При том, для моей задачи, к сожалению не подходит – мне нужно много пользователей во множестве блогов. Можно конечно, добавить профиль пользователю, а в админке фильтровать queryset по признаку “владелец блога”, но спрева хочется взглянуть на прочих кандидатов в блог-приложение-моего-сердца.
blogmaker
Тоже игнорирует моду и хостится на code.google.com - http://code.google.com/p/blogmaker/. На главной wiki-странице проекта пугающая надпись про совместимость с Django 0.96. Актуальная версия 0.6 (нмн). И первый неприятный сюрприз (не был бы сюрпризом, если б я был повнимательней) – последнее сообщение об ошибке датирется 6 августа 2009 (нмн), а транк менялся последний раз 10 января 2008. Если не ошибаюсь, то djnago 1.0 вышла в марте 2008, значит blogmaker об этом ничего не знает – жаль.
Заключение
Минус одын.
django-basic-apps.blog
Актуальная версия basic-apps- 0.6, но всем наплевать, так как хостится проект на модном github’е, а значит можно легко и просто забрать архив последней ревизией. Что мы и делаем.
Далее нужно установить basic-apps (setup.py install), создать новый проект, например “basicappsblog” и внести в код следующие изменения (опять же, не настаиваю на полном соответствии):
# settings.py
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'database.db'
...
# Можно временно, для тестирования, подключить шаблоны прям из пакета
TEMPLATE_DIRS = (
'C:/projects/not mine/django-basic-apps/basic/blog/templates'
...
INSTALLED_APPS = (
...
'django.contrib.admin',
'django.contrib.comments',
'basic.blog',
'basic.inlines',
'tagging',
'django.contrib.markup'
)
# urls.py:
...
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^blog/', include('basic.blog.urls')),
(r'^admin/', include(admin.site.urls)),
)
Далее делаем syncdb и можно смотреть что получилось:
Скрин 8 – Админка django-basic-apps.blog
Скрин 9 – Добавление поста django-basic-apps.blog
Теперь главная страница блога выглядит так:
Скрин 10 – главная страница блога django-basic-apps.blog
Страница поста открываться отказывалась, пока я не прописал в шаблоне django-basic-apps\basic\blog\templates\blog
{% load markup %}
Однако, после добавления оной заработали комменты:
Скрин 11 – страница комментирования поста в блоге django-basic-apps.blog
Заключение
Честно говоря, на данном этапе продолжать изучать django-basic-apps.blog уже не хочется, слишком уж сильно он завязан на остальных basic-apps, а удовольствие от его использования получить можно только в том случае, если использовать его как компонент pinax’а. Писать про pinax хочется ещё меньше, так как это отдельная большая задача.
Полезные ссылки:
- Серия статей о создании блога Ross’а Poulton’а: часть 1, часть 2, часть 3.
- Patrick Altman I Want To Move My Blog To Django – перечисление сторонних pluggble приложений для создания блога на django.
4 комментария:
а я взял byteflow и не парился
Да, я - адцкий мудак, про byteflow то я и забыл...
Интересно было бы сравнить Byteflow с Diario.
Кстати, BitBucket местами поудобнее GitHub'а )
Да, Вы правы. Сравнить Byteflow с Diario я попробую в одном из следующих постов.
Отправить комментарий