2011-10-27 47 views
4

我與is_authenticated掙扎返回Trueis_authenticated返回ture AnonymousUser

u = request.user 
if u.is_authenticated: 
    raise Exception('I am said to be authenticated, but I really am not.') 

爲了澄清,Django的調試視圖正確識別uAnonymousUser

u <django.contrib.auth.models.AnonymousUser object at 0x9e76f4cc> 

更奇怪的是,模板內is_anonymous工作正常:

{% if not request.user.is_authenticated %} 
    We are anonymous. 
{% endif %} 

這是爲什麼?

+0

可能重複的[Django:is \ _authenticated是\ _anonymous在註銷後都返回true](http://stackoverflow.com/questions/4298387/django-is-authenticated-and-is-anonymous-both-return註銷後) –

回答

24

這是一個method,而不是一個屬性。你需要調用它:

if u.is_authenticated(): 

當然,在一個模板,Django的calls methods for you自動。

6

is_authenticated是一種方法,所以你需要一些括號。否則,u.is_authenticated是函數對象,它是一個值爲True的值。

在模板語言中,沒有參數的函數被評估爲函數,所以這就是爲什麼你在那裏很好。

+0

哦,謝謝。這非常合理。這些微妙的錯誤之一,你可能沒有經過多年的工作與語言,只允許布爾人的條件下訓練你的眼睛。 –

相關問題