http://code.google.com/p/django-notify/
http://djangoflash.destaquenet.com/
http://code.google.com/p/django-session-messages/
Дело в том, что изначально в джанге сообщения можно было создавать только для авторизованных пользователей, чего явно не достаточно. Самое просто решение было складывать мессаги в сессию:
request.session['messages'] = ('Hi user', )
А потом выдергивать в темплейте, думаю, так было сделано не мало велосипедов )
Итак, сейчас у нас есть django.contrib.messages и что приятно они не поломали обратную совместимость )
request.user.message_set.create(message='Hi. user')
Ну а теперь по пунктам, что и для чего:
Само подключение
Надо добавить в settings.MIDDLEWARE_CLASSES 'django.contrib.messages.middleware.MessageMiddleware', и если вы хотите использовать сессии как хранилище, то перед ним подключить 'django.contrib.sessions.middleware.SessionMiddleware'.Выбор хранилища
SessionStorage - думаю тут все понятно, сообщения хранятся в сессии (а уж сессии хранятся, там где вы настроили)CookieStorage - используются куки, но стоит помнить, что есть ограничение по размеру 4096 байт
FallbackStorage - используются куки, и при превышении размера оставшиеся кладутся в сессию
LegacyFallbackStorage - используется по дефолту, он и обеспечивает совместимость со старым кодом, по функционалу аналогичен FallbackStorage, но так же достает сообщения из модели auth.Message. Учтите, что он будет удален после релиза 1.4
Для новых проектов, конечно же, стоит выбрать FallbackStorage, ну а уже существующим остается только LegacyFallbackStorage.
Cоздание сообщений
Делается все довольно просто:from django.contrib import messagesmessages.info(request, 'Three credits remain in your account.')
И вы наверное заметили, что была использована функция info, да теперь к сообщению добавлен тип, а именно: debug, logging, info, success, warning, error.
Нужно помнить, что debug игнорируется на продакшене (IMHO для этого надо использовать logging).
Еще можно создавать свои типы, но это уже сами. )
Так же как в модуле logging можно повышать/понижать уровень выводимых сообщений и создавать свои типы (это просто числовые константы), в общем гибкости в использовании хватает более чем.
Вывод в темплейтах
{% if messages %}<ul class="messages"> {% for message in messages %} <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> {% endfor %}</ul>{% endif %}
Все так же как и раньше, за исключением message.tags, эти тэги сделаны для идентификации типа сообщения, например, тут мы просто добавляем класс элементу ul. Они, кстати, тоже настраиваются )
Ну, вот вроде и все, стабильного Вам транка )
Комментариев нет:
Отправить комментарий