python - 如何在 Django 模板中使用后删除 session 变量

标签 python django templates session

def demo(request):
    if data:
        request.session['success'] = "Success'
    else:
        request.session['failed'] = "Failed'

在这里,我定义了一种方法,如果我获得数据,则存储成功的 session ,否则存储失败的 session 。

之后,我将用户重定向到另一个页面,并在模板中显示此 session 变量。

但是在显示此 session 状态后我想删除该 session 变量。因为我只想向用户仅显示此消息一次。如果用户刷新页面,则该变量应被删除

我尝试在网上查找,但没有得到任何帮助。所以请帮我解决这个问题。

谢谢

P.S:我使用 return redirect('page') 将用户重定向到另一个页面。使用 return render(request, "my_tmp.html") 渲染另一个模板不起作用,因为这只会加载当前 url 中的模板(URL 不会更改,只有内容会更改)。所以我不想那样。我知道我可以通过在上下文中传递 session 变量来使用这种方式,但这不是我想要的。

我正在使用 Django 2

最佳答案

请不要为此使用 session 变量。顾名思义, session 变量应该用于通常具有与 session 相同的生命周期的变量。自己执行此操作还会导致大量编码、特殊边缘情况,并且可能容易出错。

Django 有向用户显示消息的工具:messages framework [Django-doc] 。该文档指定了如何设置此框架,尽管默认情况下它已经安装(因此,如果您没有删除它,则无需执行太多操作)。

在您看来,您可以添加消息,例如:

from django.contrib import <b>messages</b>

def demo(request):
    if data:
        <b>messages.success</b>(request, 'Operation successful')
    else:
        <b>messages.error</b>(request, 'Operation failed!')
    return render(request, 'some_template.html', {})

在您的模板中,您可以像 documentation [Django-doc] 中指定的那样呈现消息。 :

{% if <b>messages</b> %}
<ul class="messages">
    {% for message in <b>messages</b> %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

例如,您可以将其包含在 base.html 中(从而从该 super 模板扩展所有其他页面),以便在所有页面上呈现消息。

一旦渲染消息,Django 将自动清除消息。所以不需要自己记账。

关于python - 如何在 Django 模板中使用后删除 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56414493/

相关文章:

python - 如何将 lambda 应用程序作为本地 API 运行

python - 如何解释反向传播的计算图?

python - 在 tensorflow 中,如何在不实际训练的情况下评估神经元网络

django - django 中给定用户的 message_set

c++ - 如何根据类参数定义成员类运算符

c++ - 在编译时收集模板参数

python - 如何从堆栈交换站点获取数据

Python 通过模型继承重用 View 和表单

c++ - 在每次执行时设置模板代码的类型

django - 应用程序尚未加载。有信号