在 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', {})
模板基于 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', {})