I'm new to django. I'm implementing user login mechanism in my app. When log the user in i can verify by opening admin app if the user is logged in or not and the user does log in. Now when i try to give user a message for example {{ Hello user.username }} i am getting nothing. Below is my complete code.
view.py
def login_user(request):
context = RequestContext(request)
if request.method == "POST":
login_username = request.POST['username']
login_password = request.POST['password']
user = authenticate(username=login_username,password=login_password)
if user is not None:
if user.is_active:
login(request,user)
return HttpResponseRedirect('/albums/')
else:
print "Your Account is disabled"
else:
print "Invalid login details: {0}, {1}".format(login_username, login_password)
return HttpResponse("Invalid login details supplied.")
else:
return render(request,'music/login.html',{},context)
albums.html
{% if user.is_authenticated %}
<h1>hello {{ user.username }}!</h1>
{% else %}
<h1>hello world!</h1>
{% endif %}
Help me, i am using Django version 1.10 with python 2.7
It's not working because you haven't provided user variable in template context. So either add user variable into your context in the view.
# views.py
# ...
def login_user(request):
context = RequestContext(request)
if request.method == "POST":
login_username = request.POST['username']
login_password = request.POST['password']
user = authenticate(username=login_username,password=login_password)
if user is not None:
if user.is_active:
login(request,user)
return HttpResponseRedirect('/albums/')
else:
print "Your Account is disabled"
else:
print "Invalid login details: {0}, {1}".format(login_username, login_password)
return HttpResponse("Invalid login details supplied.")
else:
context['user'] = user
return render(request,'music/login.html',{},context)
Or
Try accessing
request.user
instead. Generally request variable is added to context automatically by context processor.
{% if request.user.is_authenticated %}
<h1>hello {{ request.user.username }}!</h1>
{% else %}
<h1>hello world!</h1>
{% endif %}
It appears you pass an empty context to your template. Try this:
return render(request,'music/login.html',{'user':user})