我正在使用 session 变量来检查用户是否以承包商或雇主身份登录
当承包商:
request.session['LoggedAsContractor'] = True
当雇主:
request.session['LoggedAsContractor'] = False
然后我实现了两个切换方法,toContractor 和 toEmployer,它们只是更改 session 变量。
从 HTML View 中,当我单击切换按钮时,变量不会更改,并且其他任何内容都不会更改,但是当我刷新页面时,变量会发生更改以及其他所有内容。
在本地主机上运行项目时不会发生此错误,仅在部署项目(Gondor)时才会发生。
这就是我的 session 类型:
INSTALLED_APPS = (
'django.contrib.sessions',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
)
更新
这是由按钮Switch调用的方法toContractor
def switchToContractor(request, user_name):
request.session['LoggedAsContractor'] = True
if "employer" in request.GET['next']:
if str(request.user) == user_name:
return redirect('/contractor/' + user_name + '/')
else:
return redirect(request.GET['next'])
else:
return redirect(request.GET['next'])
request.session['LoggedAsContractor'] = True 和 request.session['LoggedAsContractor'] = False 之间的区别在于 HTML 中的 View 。
HTML 代码:
{% if request.session.LoggedAsContractor %}
<!-- Show some buttons -->
{% else %}
<!-- Show other buttons -->
{% endif %}
更新2
这是包含“切换”按钮的 HTML 代码:
{% if request.session.LoggedAsContractor %}
<a href="/contractor/{{request.user}}/switch/?next={{request.path}}">Switch to Employer View</a>
{% else %}
<a href="/employer/{{request.user}}/switch/?next={{request.path}}">Switch to Contractor View</a>
{% endif %}
网址/contractor/username/switch/重定向到方法switchToEmployer。
网址/employer/username/switch/重定向到方法switchToContractor。
最佳答案
您应该使用更新的 session 呈现响应,而不是重定向。例如:
def my_example(request):
request.session['key'] = True
response = render_to_response("example.html", context_instance = RequestContext( request ), mimetype = "text/html" )
return response
关于python - Django - 除非刷新页面,否则 session 变量不会更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11776523/