无法从django 1.10中的模板访问变量用户

时间:2017-04-04 10:35:05

标签: django python-2.7 django-views

我是django的新手。我在我的应用中实现了用户login机制。当我登录时,用户可以通过打开管理员应用程序验证用户是否已登录并且用户确实已登录。现在,当我尝试向用户提供例如{{ Hello user.username }}的消息时,我什么都没得到。以下是我的完整代码。

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 %}

帮助我,我正在使用带有python 2.7的Django 1.10版本

2 个答案:

答案 0 :(得分:2)

由于您未在模板上下文中提供user变量,因此无法正常工作。因此,要么将user变量添加到视图中的上下文中。

# 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)

或者

尝试访问

request.user

代替。通常,上下文处理器会自动将request变量添加到上下文中。

{% if request.user.is_authenticated %}
    <h1>hello {{ request.user.username }}!</h1>
{% else %}
    <h1>hello world!</h1>
{% endif %}

答案 1 :(得分:1)

您似乎将空上下文传递给模板。试试这个:

return render(request,'music/login.html',{'user':user})