2017-02-22 115 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