Django - 除非刷新页面,否则会话变量不会更改

时间:2012-08-02 11:32:06

标签: python django session session-variables

我正在使用会话变量来检查用户是以承包商还是雇主

登录

当承包商:

request.session['LoggedAsContractor'] = True

当雇主:

request.session['LoggedAsContractor'] = False

然后我实现了两种切换方法,toContractor& toEmployer,只是更改会话变量。

从HTML视图中,当我单击切换按钮时,变量不会更改而其他任何内容都不会更改,但是当我刷新页面时,变量会发生变化,而其他所有内容都会发生变化。

在localhost上运行项目时不会发生此错误,只有在部署项目时才会发生此错误(Gondor)。

这是我的会话类型:

INSTALLED_APPS = (
'django.contrib.sessions',
)

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
)

更新

这是 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中的视图。< / p>

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

2 个答案:

答案 0 :(得分:2)

您应该使用更新的会话呈现响应,而不是重定向。例如:

def my_example(request):    
    request.session['key'] = True
    response = render_to_response("example.html", context_instance = RequestContext( request ), mimetype = "text/html" )
    return response

答案 1 :(得分:0)

任何请求都需要响应才能向用户显示内容,这不是错误。你能添加按钮功能吗?