Python 使用视图之外的会话django
我在Django应用程序中使用doc创建了一个自定义模板标记,如下所示:Python 使用视图之外的会话django,python,django,python-3.x,django-sessions,Python,Django,Python 3.x,Django Sessions,我在Django应用程序中使用doc创建了一个自定义模板标记,如下所示: myproject/ __init__.py models.py templatetags/ __init__.py myCustomTags.py views.py 在myCustomTags.py中,我需要使用视图中的一些变量。py 因此,我将这些变量保存在会话中,并尝试在myCustomTags.py中获取它们,但没有任何结果,它无法识别我的会话。 我
myproject/
__init__.py
models.py
templatetags/
__init__.py
myCustomTags.py
views.py
在myCustomTags.py
中,我需要使用视图中的一些变量。py因此,我将这些变量保存在会话中,并尝试在
myCustomTags.py
中获取它们,但没有任何结果,它无法识别我的会话。我使用了doc,但这个方法似乎希望我使用session\u键。在这个方法中,我的问题是如何使用没有键的会话,或者如何将键从views.py传递到
myCustomTags.py
以下是我在该方法中的代码:
views.py:
myCustomTags.py
base.html:
{%load dynamic\u vars%}
{%userStatusMode作为用户\状态\事物%}
{{user\u status\u thing}
另一种方法是在views.py中使用requst.sessions,并尝试在myCustomTags.py中获取不起作用的会话
顺便问一下,如何在视图之外使用会话?
我是不是遗漏了什么?这完全是错的 您不应该直接实例化SessionStore。按照您的方式,您没有给出任何指示,说明您正在尝试获取或设置哪个用户的会话 相反,您应该通过
request.session
访问当前用户的会话
request.session['test_session'] = 'this_is_my_test'
同样,在模板中,您可以直接访问会话dict(无需模板标记):
若要将会话变量传递给模板,您可能需要使用上下文。@vctrd实际上,我的问题是将会话变量传递给另一个.py文件,而不是传递给htmlOk,对不起,那么您可能需要将变量作为参数传递给在这些.py文件中定义的函数。但您需要从视图中调用它们才能访问session@vctrd是的,但是那样的话,我必须为我希望传递到.py文件的每个变量创建并调用一个函数,我想也许有更好的方法,你可以在一个函数中传递一个包含所有会话变量的字典,而不需要拆分。
from django import template
from importlib import import_module
from django.conf import settings
SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
from django.contrib.sessions.backends.db import SessionStore
my_session = SessionStore()
register = template.Library()
@register.simple_tag
def userStatusMode():
status = my_session['test_session']
return status
{% load dynamic_vars %}
{% userStatusMode as user_status_thing %}
<!-- and somewher in base.html -->
{{user_status_thing}}
request.session['test_session'] = 'this_is_my_test'
{{ request.session.test_session }}