Не помню кто, но кто-то точно :), утверждал, что джанго - платформа для создания собственного блога. Пишу на джанго уже 2 года, а про блоги на ней (на нем?) задумался только сейчас. Мой блог на blogger’е и это дает определенные преимущества в скорости индексации и pr блога.
  Естественно, у платформы “специально для блогов” должно быть куча готовых решений. В принципе так и есть, но на все у меня, как всегда, не хватит ни сил, ни терпения, поэтому в обзор войдет только те, которые обновлялись не поздней чем месяц назад.
  Итак, 3 pluggable приложения на django для создания блога:
    UPD: честно признаюсь, я забыл про byteflow напрочь, когда садился это писать. Только по этому byteflow и нет в данном посте, но думаю, про него итак достаточно написано.
  Смотрю на каждое из приложений впервые, потому претендовать на абсолютную достоверность обзора не планирую. Как всегда, обзор будет более эмоционален и субъективен, чем нужно :). Комментарии приветствуются. Дельных комментаторов буду поощрять ссылкой с 10 своих сайтов на их ресурс (кому не нужны 10 обратных ссылок?).
    Не смотря на растущую популярность github’а хоститься на code.google.com - http://code.google.com/p/django-diario/. Актуальная версия (на момент написания) - 0.2, выпущенная 13th December 2008, но кому нужен релиз? Берем транк, который обновлялся 20 октября 2009 (опять же на момент написания - далее нмн). И сразу первая радость – в репозитории рядом с приложением лежит каталог examples, а в нем basic_blog.
  Идем в каталог с basic_blog примером, запускаем
    Запускаем тестовый сервер, радуемся.
   
 
  Скрин 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 по признаку “владелец блога”, но спрева хочется взглянуть на прочих кандидатов в блог-приложение-моего-сердца.
   
      Тоже игнорирует моду и хостится на code.google.com - http://code.google.com/p/blogmaker/. На главной wiki-странице проекта пугающая надпись про совместимость с Django 0.96. Актуальная версия 0.6 (нмн). И первый неприятный сюрприз (не был бы сюрпризом, если б я был повнимательней) – последнее сообщение об ошибке датирется 6 августа 2009 (нмн), а транк менялся последний раз 10 января 2008. Если не ошибаюсь, то djnago 1.0 вышла в марте 2008, значит blogmaker об этом ничего не знает – жаль.
  Заключение
  Минус одын.
    Актуальная версия 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
 Скрин 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.