如何使用瞬态变量呈现Django模板?

时间:2015-02-09 21:22:51

标签: django django-templates

我有一个强制执行严格页面序列的应用程序。如果用户单击“后退”按钮,则应用程序会检测到无序页面访问,并将用户发送回开始。

我希望通过将用户重定向到正确的页面并显示弹出式javascript警告框告诉他们不要使用“后退”按钮,使其更加友好。

我已经使用了一个执行大量有效性检查的函数,如果请求没问题则返回None,如果请求无效,则返回HttpResponseRedirect到另一个页面(通常是错误页面或登录页面)。我的所有观点都将此代码放在顶部:

response = validate(request)
if response:
    return response

因此,由于我已经有了这个validate()函数,所以它似乎是一个添加这个额外代码以检测无序访问的好地方。

但是,由于无序检测标志必须经过重定向,我不能只设置一个视图变量;我必须在会话数据中设置标志。但是我当然不希望永久地在会话数据中设置标志;我希望在处理模板后从会话数据中删除该标志。

我可以在我的所有渲染调用中添加这样的代码:

back_button = request.session.get('back_button', False)
response = render(request, 'foo.html', { 'back_button': back_button } )
if back_button:
    del request.session['back_button']
return response

但这看起来有点乱。有没有办法在处理模板后自动删除会话密钥?也许是一块中间件?

我使用的是基于功能的视图,而不是基于类的,顺便说一句。

1 个答案:

答案 0 :(得分:1)

会话对象使用字典界面,因此您可以使用pop代替get来同时检索和删除密钥:

back_button = request.session.pop('back_button', False)