【问题标题】:How to delete session variable after use in Django templates如何在 Django 模板中使用后删除会话变量
【发布时间】:2019-10-18 05:58:42
【问题描述】:
def demo(request):
    if data:
        request.session['success'] = "Success'
    else:
        request.session['failed'] = "Failed'

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

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

但在显示此会话状态后,我想删除该会话变量。因为我想只向用户显示此消息一次。如果用户刷新页面,那么这个变量应该被删除

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

谢谢

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

我正在使用 Django 2

【问题讨论】:

标签: python django templates session


【解决方案1】:

不要为此使用会话变量。正如名称所暗示的那样,会话变量应该用于通常具有与会话相同的生命周期的变量。自己这样做也会导致大量的编码、特殊的边缘情况,并且很可能容易出错。

Django 具有向用户显示消息的工具:messages framework [Django-doc]。文档指定了如何设置这个框架,尽管默认情况下它已经安装(所以如果你没有删除它,你不需要做很多事情)。

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

from django.contrib import messages

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

然后,您可以在模板中呈现documentation [Django-doc] 中指定的消息:

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

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

Django 会在这些信息被渲染后自动清除这些信息。所以不用自己记账。

【讨论】:

  • 谢谢兄弟,它正在工作!谢谢你告诉我正确的道路。我是 Django 的初学者。我习惯于使用会话来发送消息,但现在我知道了正确的工具。你的解释很棒。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2019-01-01
  • 2011-02-02
  • 2022-10-17
  • 2023-03-13
相关资源
最近更新 更多