Django身份验证适用于页面,但不适用于另一个页面

时间:2016-03-17 13:26:46

标签: django django-forms django-authentication

我一直在研究Django身份验证,但我偶然发现了一个问题:登录工作在一个页面上("发布详细信息"博客页面),但不在主页上。

这是处理此标题的base.html的一部分

{% if user.is_authenticated %}
    <a href="{% url 'blog.views.post_new' %}" class="top-menu header-icon"><span class="glyphicon glyphicon-plus"></span></a>
    <a href="{% url 'blog.views.post_draft_list' %}" class="top-menu header-icon"><span class="glyphicon glyphicon-edit"></span></a>
    <p class="top-menu">Hello, <a href="/edit/">{{ user.first_name }}</a>!<small> (<a href="{% url 'django.contrib.auth.views.logout' %}">Log out</a>)</small></p>
{% else %}
<form>
    {% csrf_token %}
    {% if next %}
    <input type="hidden" name="next" value="{{ next }}" />
    {% endif %}

    {{ login_form.as_p }}
</form>
{% endif %}

视图对我来说似乎很好,无论如何它是

def login(request):
    if request.method == 'POST':
        login_form = CustomLoginForm(request.POST)

        email = request.POST.get('email')
        password = request.POST.get('password1')

        user = authenticate(email=email, password=password)

        if user is not None:
            if user.is_active:
                auth_login(request, user)
                return HttpResponseRedirect('/')
            else:
                return HttpResponse("Your Blog account is disabled.")
        else:
            print "Invalid login details: {0}, {1}".format(email, password)
            return HttpResponse("Invalid login details supplied. Get back to the <a href=\"/\">homepage</a>.")
    else:
        login_form = CustomLoginForm()

    return render(request, 'blog/post_list.html', {})

def post_list(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')
    user = CustomUser.objects.all()

    user_form = CustomUserCreationForm()
    login_form = CustomLoginForm()

    return render(request, 'blog/post_list.html', {'posts': posts, 'user_form': user_form, 'login_form': login_form, 'user': user})

我认为问题的核心可能在base.html文件的标题上或视图上。

这是我在主页上看到的内容(即使我已登录)

enter image description here

这是我在详细信息页面上看到的内容(以及我在主页上应该看到的内容)

enter image description here

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你的问题在这里:

user = CustomUser.objects.all()

然后

return render(request, 'blog/post_list.html', 
              {'posts': posts, 'user_form': user_form, 
               'login_form': login_form, 'user': user})

您在请求上下文中将CustomUseruser个对象的查询集结果传递给user。它会覆盖django.contrib.auth.context_processors.auth上下文处理器分配的return render(... 'users': user}) 变量。

要解决此问题,只需将模板变量的名称更改为其他名称,例如:

{} + []