1

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

当承包商:

request.session['LoggedAsContractor'] = True

当雇主:

request.session['LoggedAsContractor'] = False

然后我实现了两个切换方法,toContractor 和 toEmployer,它们只是改变了会话变量。

从 HTML 视图中,当我单击切换按钮时,变量没有改变,其他也没有改变,但是当我刷新页面时,变量和其他一切都改变了。

在本地主机上运行项目时不会发生此错误,仅在部署项目时发生(Gondor)。

这是我的会话类型:

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'] = Truerequest.session['LoggedAsContractor'] = False之间的区别在于HTML 中的视图。

HTML 代码:

{% if request.session.LoggedAsContractor %}
    <!-- Show some buttons -->
{% else %}
    <!-- Show other buttons -->
{% endif %}

更新 2

这是包含 Switch 按钮的 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 %}

url /contractor/username/switch/重定向到方法switchToEmployer

url /employer/username/switch/重定向到方法switchToContractor

4

2 回答 2

2

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

def my_example(request):    
    request.session['key'] = True
    response = render_to_response("example.html", context_instance = RequestContext( request ), mimetype = "text/html" )
    return response
于 2012-08-04T21:57:18.220 回答
0

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

于 2012-08-02T11:40:06.630 回答