Вот что я делаю, используя контекстные процессоры:
project/application/context.py
(проверить сообщения и добавить их в контекст):
def messages(request):
messages = {}
if 'message' in request.session:
message_type = request.session.get('message_type', 'error')
messages = {'message': request.session['message'],
'message_type': message_type}
del request.session['message']
if 'message_type' in request.session:
del request.session['message_type']
return messages
project/settings.py
(добавить контекст к TEMPLATE_CONTEXT_PROCESSORS
):
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"django.core.context_processors.debug",
"django.core.context_processors.media",
"django.core.context_processors.auth",
"project.application.context.messages",
)
С учетом вышеизложенного функция messages
будет вызываться при каждом запросе, и все, что она возвращает, будет добавлено в контекст шаблона. С этим на месте, если я хочу дать пользователю сообщение, я могу сделать это:
def my_view(request):
if someCondition:
request.session['message'] = 'Some Error Message'
Наконец, в шаблоне вы можете просто проверить, есть ли ошибки для отображения:
{% if message %}
<div id="system_message" class="{{ message_type }}">
{{ message }}
</div>
{% endif %}
Тип сообщения просто используется для стилизации в зависимости от того, что это такое («ошибка», «уведомление», «успех») и от того, как это настроено, вы можете добавить только 1 сообщение за раз для пользователя, но это все, что мне действительно нужно, так что это работает для меня. Его можно легко изменить, чтобы включить несколько сообщений и тому подобное.