当前位置:  开发笔记 > 后端 > 正文

在Django中,是否可以从自定义标签中访问当前用户会话?

如何解决《在Django中,是否可以从自定义标签中访问当前用户会话?》经验,为你挑选了2个好方法。

我正在Django中编写一个自定义标记,它应该输出存储在用户会话中的值,但我找不到从自定义标记函数中访问会话对象的方法.有没有办法做到这一点,没有手动将会话对象分配给上下文变量?



1> Michael Wark..:

您应该能够在settings.py文件中添加请求上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS = ("django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'django.core.context_processors.request',)

这将与当前答案完全相同,而无需添加自定义文件.


@Wouter会话在`request.session`上可用

2> 小智..:

塞巴斯蒂安似乎没有任何冒犯,因为这似乎是一个有用的黑客攻击,但奇怪的是在12月24日的博客文章中关于访问管理员的用户数据,詹姆斯贝内特,Django的发布经理,有关于使用threadlocal的说法黑客:

一个很大的免责声明:这些类型的功能有很多很多潜在的用途.他们中的许多人是错的和愚蠢的,你不应该尝试他们....此外,您偶尔会看到有人建议这些功能可以通过所谓的"threadlocal hack"获得; 这基本上涉及将request.user粘贴到一种神奇的全局可用变量中,如果你不知道你在做什么,那就是非常糟糕的事情.即使你确实知道自己在做什么,这通常也是一件非常糟糕的事情,因为你可能只是在做这件事,因为你很懒,并且不想确保你正确传递信息.因此,如果您看到有人建议您使用"threadlocal"执行此操作,请忽略该人.

并不是说你应该忽略塞巴斯蒂安,但它可能值得追求其他途径,而不是使用不被认为是最佳实践的threadlocal.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有