您正在使用会话机制向用户发布消息,但 Django 已经有相应的工具:Django's messages framework。实际上这些消息的默认存储机制是会话变量。
但是,消息框架让 Django 可以轻松记录用户看到的消息,并可以轻松地将 多个 消息传递给用户。此外,可以为消息赋予一定的严重性级别。
您可以通过将'django.contrib.sessions.middleware.SessionMiddleware' 和'django.contrib.messages.middleware.MessageMiddleware' 都指定为MIDDLEWARE setting [Django-doc] 来安装消息框架。此外,'django.contrib.messages' 应用程序应位于INSTALLED_APPS setting [Django-doc] 中。默认情况下已经是这种情况,对于TEMPLATES setting [Django-doc],您应该将'django.contrib.messages.context_processors.messages' 添加到'context_processors' 键,因此设置应如下所示:
# settings.py
# …
MIDDLEWARE = [
# …,
'django.contrib.sessions.middleware.SessionMiddleware',
# …,
'django.contrib.sessions.middleware.MessageMiddleware'
# …
]
# …
INSTALLED_APPS = [
# …,
'django.contrib.messages',
# …
]
# …
TEMPLATES = [
{
# …,
'context_processors': [
# …,
'django.contrib.messages.context_processors.messages'!!!,
# …
]
# …
}
]
# …
然后您可以向request 对象添加一条消息:
from django.contrib import messages
# …
messages.warning(request, 'Some warning')
然后在模板中,你可以渲染消息:
{% for message in messages %}
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<i class="bi bi-check2-circle"></i> {{ message }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}