【问题标题】:Access variables in the Redirect in django在 django 的 Redirect 中访问变量
【发布时间】:2017-05-09 11:34:33
【问题描述】:

基于组在登录中呈现模板。如何在我的模板中访问这些变量。例如,如何在重定向中访问这些变量,就像渲染中的上下文一样?这是我的代码。 错误是:

名称“用户名”未定义

Views.py

def login_user(request):
if request.method == "POST":
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    all_requests= Retest.objects.all() 
    projector_requests = Eventprojector.objects.all()
    classroom_requests = Eventclassroom.objects.all()
    lab_requests = Eventlab.objects.all()
    mikesystem_requests = Eventmikesystem.objects.all()
    extensioncable_requests = Eventextensioncable.objects.all()
    auditorium_requests = Eventauditorium.objects.all()
    graphicshall_requests = Eventgraphicshall.objects.all()
    u = User.objects.get(username=username)




    if user is not None:
        if user.is_active:
            login(request, user)
            if user.groups.filter(name='Rep').exists():
                return redirect('/rep')
            elif
                #..........(other groups)

            else:       
                return render(request, 'retest/login.html', {'error_message': 'Invalid login'})

        else:
            return render(request, 'retest/login.html', {'error_message': 'Your account has been disabled'})
    else:
        return render(request, 'retest/login.html', {'error_message': 'Invalid login'})
  return render(request, 'retest/login.html')
@login_required
def rep(request):

    u=User.objects.get(username=username)
    return render(request, 'retest/home.html', {'u':u})

urls.py

url(r'^$', views.login_user, name='login_user'),
url(r'^rep$', views.rep, name='rep'),

【问题讨论】:

  • 什么是these 变量?至少发布一个例子
  • 真的不清楚你在问什么。您尝试访问哪些数据,以及 - 更重要的是 - 在哪里
  • 编辑了上面的问题。

标签: python django django-views django-urls django-login


【解决方案1】:

当您返回重定向响应时,您是在告诉浏览器加载一个新 URL。当浏览器请求新 URL 时,您将无法再访问新视图中的旧上下文。

如果您需要将信息传递给新 URL,您可以将其包含在重定向到的 URL 中,例如/rep/22//rep/?id=22,或在会话中保存数据。

但是,在这种情况下,您不需要这样做,因为您可以简单地使用 request.user 访问已登录的用户。

@login_required
def rep(request):
    u = request.user
    return render(request, 'retest/home.html', {'u':u})

您甚至不需要在上下文中包含u。由于您使用的是render 快捷方式,因此您应该能够在模板中访问{{ user }},只要启用了身份验证模板上下文处理器。

@login_required
def rep(request):
    return render(request, 'retest/home.html', {})

【讨论】:

    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 2014-04-08
    • 2015-01-15
    • 2018-07-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多