【发布时间】:2019-07-19 05:06:36
【问题描述】:
我在我的 Django 应用程序中使用this doc 制作了一个自定义模板标签:
myproject/
__init__.py
models.py
templatetags/
__init__.py
myCustomTags.py
views.py
在myCustomTags.py 中,我需要使用views.py 中的一些变量
所以我将这些变量保存在会话中,并尝试将它们放入myCustomTags.py,但注意到有效并且它无法识别我的会话。
我使用了this doc,但似乎这种方法希望我使用 session_keys。在这种方法中 我的问题 是如何使用没有密钥的会话或以某种方式将密钥从 views.py 传递到 myCustomTags.py 。
这是我在这个方法中的代码:
views.py:
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()
def user_login(request):
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
# some process to validate and etc...
my_session['test_session'] = 'this_is_my_test'
my_session.create()
return redirect(reverse('basic_app:index'))
myCustomTags.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
base.html:
{% load dynamic_vars %}
{% userStatusMode as user_status_thing %}
<!-- and somewher in base.html -->
{{user_status_thing}}
另一种方法是在views.py 中使用requst.sessions 并尝试在myCustomTags.py 中获取它们,但这也不起作用。
顺便说一句,我如何在视图之外使用会话? 我在这里错过了什么吗?
【问题讨论】:
-
要将会话变量传递给您的模板,您可能应该使用上下文。
-
@vctrd 实际上我的问题是将我的会话变量传递给另一个 .py 文件而不是 html
-
好的,抱歉,那么您应该将变量作为参数传递给您在这些 .py 文件中定义的函数。但是您需要从视图中调用它们才能访问会话
-
@vctrd 是的,但这样我必须为我希望传递给该 .py 文件的每个变量创建并调用一个函数,我认为也许会有一些更好的方法来做到这一点
-
您可以在一个函数中传递包含所有会话变量的字典,无需拆分。
标签: python django python-3.x django-sessions