Категории

Язык
Окружение
Проект
Циклы статей

21 сентября 2014 г. 16:30 (ред. 24 сентября 2014 г. 17:19)
Показываем на сайте статически и динамически сформированные блоки в зависимости от текущего URL.
Сегодня выкладываю очередную версию django-siteblocks.

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

Динамический блок у нас на pythonz.net используется для вывода изречений из Дзена Питона (пример на странице «О проекте»).

Статические блоки можно создавать и редактировать прямо через административный интерфейс Django. Динамические блоки, напротив, создаются в коде приложения. Разумеется, при использовании вторых у вас возникает намного больше возможностей определить логику их показа (вплоть до того, что можно вовсе не связывать блок с URL), зато для создания/изменения первых не нужно уметь программировать.

Кстати, в новой версии, возможностей у статических блоков стало немного больше. Теперь вы можете ограничить доступность блока: например, разрешить его показ только авторизовавшимся пользователям, либо, наоборот, гостям. Именно эта новая возможность используется здесь на pythonz.net: в блоке «Если вам интересно», выводящемся в правой колонке на страницах с детальной информацией о таких объектах как книги и видео, отображаются одни подсказки для гостей и совсем другие для зарегистрированных пользователей.

Обращаю ваше внимание на то, что можно создать несколько блоков с разным содержимым, но под одним псевдонимом (alias). В этом случае при каждом посещении целевых страниц конкретный блок для вывода будет выбран из заданного перечня псевдослучайным методом.

Чтобы определить для каких страниц предназначен блок, можно не только указать конкретный URL, но и задать его регулярным выражением, или использовать его имя (см. документацию по именованию URL-шалонов в Django — https://docs.djangoproject.com/<...>

Когда блоки определены, остаётся только указать в шаблонах места, где они должны выводиться. Это делается при помощи тега {% siteblock "my_block" %} он принимает псевдоним блока, а также умеет не выводить содержимое блока, а помещать его в переменную контекста шаблона для последующего использования.

Вот, пожалуй, и всё, что я хотел рассказать этим осенним днём про django-siteblocks.
Спасибо за внимание. Удачи!