在 django 的重定向中访问变量

Access variables in the Redirect in django

模板基于 groups.How 在登录中呈现 我可以在我的 template.For 示例中访问这些变量吗 我怎样才能像渲染中的上下文一样在重定向中访问这些变量?这是我的代码。 错误是:

name 'username' is not defined

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'),

当您 return 重定向响应时,您是在告诉浏览器加载新的 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', {})