class IndexView(ListView): """ Представление для просмотра списка статей. Представление реализовано с использованием generic-представления ListView. В представлении активирована пагинация и реализован поиск """ template_name = 'articles/index.html' model = Article context_object_name = 'articles' ordering = ('title', '-created_at') paginate_by = 5 paginate_orphans = 1 def get(self, request, **kwargs): self.form = SearchForm(request.GET) self.search_data = self.get_search_data() return super(IndexView, self).get(request, **kwargs) def get_queryset(self): queryset = super().get_queryset() if self.search_data: queryset = queryset.filter( Q(title__icontains=self.search_data) | Q(author__icontains=self.search_data) | Q(content__icontains=self.search_data) ) return queryset def get_search_data(self): if self.form.is_valid(): return self.form.cleaned_data['search_value'] return None def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['search_form'] = self.form user = self.request.user i = [] for i in ArticleLike.objects.filter(id=self.kwargs.get('id')): i.append(i.article.id) context['like_id'] = i liked_articles = [] if self.request.user.is_authenticated: ddd = ArticleLike.objects.filter(author=self.request.user) for d in ddd: liked_articles.append(d.article.pk) context['liked_articles'] = liked_articles if self.search_data: context['query'] = urlencode({'search_value': self.search_data}) return context
def get(self, request, **kwargs): self.form = SearchForm(request.GET) self.search_data = self.get_search_data() return super(IndexView, self).get(request, **kwargs)