2009-12-08 10 views
1

我想要最簡單的方式來顯示「你」,而不是用戶名,如果該用戶名匹配當前用戶。如何在不顯式傳遞過濾器的情況下獲取當前用戶?

理想像這樣的過濾器(其中,object.owner是在auth.User指向一個ForeignKey字段)

{{ object.owner|username_or_you }} 

或一個辦法攔截這個越往上鍊 - i個輸出user.username所以在任意位置會輸出「您」或實際使用的用戶名。

目前我有這樣的:

{{ object.owner|username_or_you,request.user }} 

其中濾波器是這樣的:

def username_or_you(user, request_user): 
if user == request_user: 
    return "You" 
else: 
    return user 

回答

0

您可以使用包含標籤

Django | Custom template tags and filters

你可以把它用在takes_context=True另一種選擇註冊,然後訪問它使用context['request'].user

我個人只給用戶到過濾吉姆的建議標籤,但這。

0

我想就這個問題發表評論,但我目前缺乏信譽的話,唉我在「回答表單」中回覆:

究竟是什麼問題?我問你,因爲你已經提供了一個漂亮的小自定義模板過濾器的樣板代碼。您可以在http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters閱讀有關自定義過濾器的信息。您只需將代碼包裝到過濾器類中,並將其導入要使用過濾器的模板中。 :)

+0

問題是能夠調用該過濾器,但不傳入用戶。我有這個過濾器設置和工作正常,我只是想看看是否有一個過濾器的方式來獲得請求對象,而不通過它。 –

0

我認爲你的問題是你在過濾器中使用的是逗號而不是冒號。

所以...代碼:

{{ object.owner|username_or_you,request.user }} 

應該是:

{{ object.owner|username_or_you:request.user }} 

那麼當前用戶將作爲第二個參數的過濾器傳遞

+0

是的 - 這是一個錯字 - 我的問題是我怎麼可以只是轉儲第二個參數以保存輸入「request.user」,然後調用它。 –

+0

這需要一個模板標籤。查看Zach的答案:) – Jiaaro

相關問題