我应该将字典传递给我的模板吗?

时间:2012-12-12 20:16:18

标签: django django-templates django-views

作为一个新手,我正在努力找出属于哪里的东西。我有ListView列出系统中的所有用户,它包含get_queryset方法 - 以下内容:

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']行时,我认为答案变为否?

2 个答案:

答案 0 :(得分:1)

你做的方式完全没问题。我发现通过在视图中明确提供模板所需的信息来将模板与模型分离是有用的,这实质上就是你所做的。没有从名为get_queryset的方法返回实际查询集有点奇怪,但我也得出了基于类this这样的批评的结论,即基于类的视图,因为它们当前已实现在Django中应该被视为达到目的的手段,而不是用于组织视图代码的教条方式。抽象只是不像Django ORM那样干净。

如果你真的想要一点点滑动,你可以尝试使用values方法来缩小查询集,并在注册计数中添加一个注释。但可能没什么意义。

答案 1 :(得分:0)

这取决于您尝试对阵列用户做什么'。编辑模板的人只能以某种方式设置和显示数据。 get_queryset函数可以提供模板的数据。