Ограничьте доступ к части шаблона для пользователей, которые являются частью группы, используя представления на основе классов.Джанго 2.0 - PullRequest
0 голосов
/ 31 мая 2018

Я хочу ограничить доступ пользователей в определенных группах к частям шаблона HTML.У меня есть представление на основе классов, которое выглядит следующим образом:

Views.py

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

С представлениями на основе функций я могу ограничить доступ к шаблону на основе группы Someonesиспользование request.user.groups.filter(name='GROUP_NAME').exists() из В Django, как я могу проверить, входит ли пользователь в определенную группу?

Я попытался изменить мои 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 голосов
/ 31 мая 2018

Чтобы получить переменную контекста в шаблон при использовании представления на основе классов, нужно переопределить метод 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 для получения дополнительной информации.на get_context_data().

...