2012-12-12 84 views
0

作爲一個新手,我試圖找出屬於哪裏的東西。我有一個ListView列出系統中的所有用戶,它包括get_queryset方法沿着線-something:我應該將字典傳遞給我的模板嗎?

def get_queryset(self): 
    users = [] 
    for user in User.objects.all(): 
     a_user = {}    
     a_user['username'] = user.username 
     a_user['full_name'] = user.get_full_name() 
     a_user['num_of_friends'] = len(user.friends.all()) 
     a_user['phone_num'] = user.get_profile().phone_num 

     a_user['has_subscription'] = bool(Subscription.objects.filter(subscriber=self.request.user)) 

     users.append(a_user) 
    return users 

因此而不是回到我在做這本字典出用戶的查詢集每個用戶的各種選擇的屬性,以及模板設計者獲得的內容僅限於我認爲他們應該擁有的內容。

更好的做法是將用戶對象傳遞給模板,讓模板編寫器從他們那裏得到他們需要的任何東西?我想答案是肯定的。

但是,當涉及到上面的a_user['has_subscription']行時,我假設答案變成了否?

回答

1

你做這件事的方式完全沒問題。我發現通過在視圖中明確提供模板所需的信息來區分我的模板和模型是有用的,這基本上就是您所做的。有一點奇怪,不是從名爲get_queryset的方法返回一個實際的查詢集,但我也得出結論,基於諸如this這樣的批評,他們目前在Django中實現的基於類的視圖應被視爲一種手段結束,而不是組織你的視圖代碼的教條式的方式。這個抽象並不像Django ORM那樣簡潔。

如果您確實想要一點點滑動,可以嘗試使用values方法縮小您的查詢集,並在註釋中添加一個註釋。但可能沒有多少意義。

0

這取決於你想要做什麼用數組'用戶'。有人編輯模板只能以某種方式設置樣式和顯示數據。 get_queryset函數可以爲模板提供數據。

相關問題