2017-02-22 78 views
1

我用django创建了一些单独的视图和相应的模板。它们都扩展了一个base.html模板,刚才我在base.html头部添加了一些按钮,这样我就可以在不同视图之间导航。Django的用户似乎没有登录

我的网站也有一个用户模型实现。在标题中,我会快速检查一下用户是否登录。当我显示他/她的名字以及他/她没有登录时,它会显示一个注册和登录链接。

{% if request.user.is_authenticated %} 
    <p class="top-menu" style="font-size:17px">Logged in as: {{ request.user.name }} (<a href="{% url 'logout' %}" class="top-menu">Logout</a>)</p> 
{% else %} 
    <a href="{% url 'registration' %}" class="top-menu">Register</a>/<a href="{% url 'login' %}" class="top-menu">Login</a> 
{% endif %} 

现在我的问题是,对于所有页面,这实际上按预期工作,除了一个。这是一个带有表格(设置)的页面。 GET看起来像这样:

if request.method == 'GET': 
     form_submission = SubmitForm() 
     formset_authors = formset_factory(SubmitAuthorForm) 

    c = { 'form_submission': form_submission, 'formset_authors': formset_authors } 
    c.update(csrf(request)) 

    return render_to_response('journal_submit.html' ,c , RequestContext(request)) 

奇怪的是,当我添加一个login_required装饰器它让我通过。所以它知道我登录了。我猜测用户不知道怎么没有正确传递。它是否正确?如果是的话,我该怎么做(安全)?

+0

如果你使用Django的django.contrib.auth.context_processors',你可以离开'要求'request.user'出https://docs.djangoproject.com/en/1.10/ref/templates/api/#built-in-template-context-processors – Nrzonline

回答

2

被选择render_to_response过时了,我认为你的问题是使用RequestContext,而不是你可以只使用render

from django.shortcuts import render 
return render(request, 'journal_submit.html', c) 
+1

事情可能很简单,有时候当你知道答案时。谢谢! – DisneylandSC

+0

@DisneylandSC - 不用担心,您不需要使用csrf更新上下文 – Sayse