如何删除Django HTML模板中的request.session变量



代码:

{% if request.session.message %}
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<i class="bi bi-check2-circle"></i> {{request.session.message}}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endif %}
{% request.session.remove('message') %}

错误:

TemplateSyntaxError位于/无法分析"request.session.remove('message'("中的剩余部分:"('message''(">

您正在使用会话机制向用户发布消息,但Django已经有了相应的工具:Django的消息框架。事实上,这些消息的默认存储机制是会话变量。

然而,消息框架可以让Django轻松地记录用户看到的消息,并可以轻松地向用户传递多个消息。此外,可以为消息提供一定的严重性级别。

通过将'django.contrib.sessions.middleware.SessionMiddleware''django.contrib.messages.middleware.MessageMiddleware'都指定为MIDDLEWARE设置[Django-doc]来安装消息框架。此外,'django.contrib.messages'应用程序应在INSTALLED_APPS设置[Django-doc]中。默认情况下已经是这样了,对于TEMPLATES设置[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 importmessages
# …
messages.warning(request, 'Some warning')

然后在模板中,您可以使用以下内容呈现消息:

{% for message inmessages%}
<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 %}

对于想要从Django模板中清除会话存储的人[不仅仅是消息]

index.html

<form action="/" method="get">
<input type="button" name="clear" hidden="True">
<input type="submit" value="clear session">
</form>

视图.py

def index(request):
if request.method == 'GET':
if "clear" in dict(request.GET):
request.session = {}
return render(request, 'index.html')

最新更新