Ограничете достъпа до част от шаблон до потребители, които са част от група, използвайки изгледи, базирани на клас. Django 2.0

Искам да огранича потребителите в определени групи от достъп до части от HTML шаблона. Имам изглед, базиран на клас, който изглежда така:

Views.py

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

С базирани на функции изгледи мога да огранича достъпа до шаблон въз основа на нечия група, използваща 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'

person ccsv    schedule 30.05.2018    source източник


Отговори (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

Вижте документи на Django за повече информация относно get_context_data().

person Franey    schedule 30.05.2018