gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:33:41 25 4
gpt4 key购买 nike

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

Views.py

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

使用基于函数的 View ,我可以使用来自 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'

最佳答案

使用基于类的 View 时,将上下文变量获取到模板中的方法是覆盖 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

参见 Django docs有关 get_context_data() 的更多信息。

关于django - 使用基于类的 View 将模板的一部分限制为属于组的用户的访问权限。 Django 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50614520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com