使用基于类的视图将对模板的一部分的访问权限限制为属于组的用户。 Django 2.0

时间:2018-05-30 23:13:19

标签: django django-class-based-views django-permissions

我想限制某些群组中的用户访问HTML模板的部分内容。我有一个基于类的视图,如下所示:

Views.py

class PostListView(ListView):
    model = BlogPost
    paginate_by = 10
    template_name = 'main/mysite.html'

使用基于功能的视图,我可以使用In Django, how do I check if a user is in a certain group?中的request.user.groups.filter(name='GROUP_NAME').exists()来限制基于某人组的模板访问权限

我尝试更改我的view.py和HTML模板:

views.py

class PostListView(ListView):
    model = BlogPost
    paginate_by = 10
    template_name = 'main/mysite.html'

    def dispatch(self, request):
        in_group =  request.user.groups.filter(name='GROUP_NAME').exists()
        return in_group

HTML模板

....
{% if in_group %}
some code here shows up if user belong to group
{% endif %}
....

当用户不是该群组的成员时,这将为我提供正确的显示,但当他们是正确群组的成员时,我会收到归因错误:

Exception Type: AttributeError at /mysite
Exception Value: 'bool' object has no attribute 'get'

1 个答案:

答案 0 :(得分:1)

使用基于类的视图时将上下文变量放入模板的方法是覆盖get_context_data()方法:

class PostListView(ListView):
    model = BlogPost
    paginate_by = 10
    template_name = 'main/mysite.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['in_group'] =  self.request.user.groups.filter(name='GROUP_NAME').exists()
        return context

有关get_context_data()的更多信息,请参阅Django docs