我正在Django中编写一个自定义标记,它应该输出存储在用户会话中的值,但我找不到从自定义标记函数中访问会话对象的方法.有没有办法做到这一点,没有手动将会话对象分配给上下文变量?
您应该能够在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',)
这将与当前答案完全相同,而无需添加自定义文件.
塞巴斯蒂安似乎没有任何冒犯,因为这似乎是一个有用的黑客攻击,但奇怪的是在12月24日的博客文章中关于访问管理员的用户数据,詹姆斯贝内特,Django的发布经理,有关于使用threadlocal的说法黑客:
一个很大的免责声明:这些类型的功能有很多很多潜在的用途.他们中的许多人是错的和愚蠢的,你不应该尝试他们....此外,您偶尔会看到有人建议这些功能可以通过所谓的"threadlocal hack"获得; 这基本上涉及将request.user粘贴到一种神奇的全局可用变量中,如果你不知道你在做什么,那就是非常糟糕的事情.即使你确实知道自己在做什么,这通常也是一件非常糟糕的事情,因为你可能只是在做这件事,因为你很懒,并且不想确保你正确传递信息.因此,如果您看到有人建议您使用"threadlocal"执行此操作,请忽略该人.
并不是说你应该忽略塞巴斯蒂安,但它可能值得追求其他途径,而不是使用不被认为是最佳实践的threadlocal.