# -*- coding: utf-8 -*- import json from django.views.generic import DetailView from django.conf import settings from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext as _ from functions.custom_views import ListView from theme.models import Tag, Theme from meta.views import MetadataMixin from .models import Article from .forms import BlogFilterForm, NewsFilterForm class NewsList(MetadataMixin, ListView): model = Article template_name = 'client/article/news_list.html' paginate_by = settings.CLIENT_PAGINATION def get_queryset(self): """ filters queryset by get params if they exists """ if self.request.GET: qs = self.model.objects.news() themes = self.request.GET.getlist('theme') if themes: qs = qs.filter(theme__id__in=themes) tags = self.request.GET.getlist('tag') if u'' in tags: tags.remove(u'') if tags: tags = tags[0].split(',') qs = qs.filter(tag__id__in=tags) return qs else: return self.model.objects.news().filter(publish_date__isnull=False) def get_context_data(self, **kwargs): """ add filter form to context """ context = super(NewsList, self).get_context_data(object_list=self.object_list) if self.request.GET: filter_form = NewsFilterForm(self.request.GET) tags = self.request.GET.getlist('tag') if u'' in tags: tags.remove(u'') if tags: tags = tags[0].split(',') tag_qs = Tag.objects.filter(id__in=tags) tags = [{'id': str(tag.id), 'text': tag.name} for tag in tag_qs] filter_form.fields['tag'].widget.attrs['data-predifined'] = json.dumps(tags) filter_form.fields['tag'].widget.attrs['value'] = '' else: filter_form = NewsFilterForm() context['article_filter_form'] = filter_form return context class EventNewsList(MetadataMixin, ListView): model = Article template_name = 'client/article/event_news_list.html' paginate_by = settings.CLIENT_PAGINATION def get_queryset(self): """ filters queryset by event if exists or 404 """ slug = self.kwargs.get('slug') event_model = self.kwargs.get('event_model') self.event = get_object_or_404(event_model.enable, url=slug) params = {event_model.__name__.lower(): self.event} qs = self.model.objects.news()\ .filter(publish_date__isnull=False, **params).order_by('-publish_date') return qs def get_context_data(self, **kwargs): """ add filter form to context """ context = super(EventNewsList, self).get_context_data(object_list=self.object_list) context['event'] = self.event return context class NewsDetail(MetadataMixin, DetailView): model = Article slug_field = 'slug' template_name = 'client/article/news.html' class BlogList(MetadataMixin, ListView): model = Article template_name = 'client/article/blog_list.html' paginate_by = settings.CLIENT_PAGINATION def get_queryset(self): """ filters queryset by get params if they exists """ if self.request.GET: qs = self.model.objects.blogs() themes = self.request.GET.getlist('theme') if themes: qs = qs.filter(theme__id__in=themes) tags = self.request.GET.getlist('tag') if u'' in tags: tags.remove(u'') if tags: tags = tags[0].split(',') qs = qs.filter(tag__id__in=tags) return qs else: return self.model.objects.blogs() def get_context_data(self, **kwargs): """ add filter form to context """ context = super(BlogList, self).get_context_data(object_list=self.object_list) if self.request.GET: filter_form = BlogFilterForm(self.request.GET) tags = self.request.GET.getlist('tag') if u'' in tags: tags.remove(u'') if tags: tags = tags[0].split(',') tag_qs = Tag.objects.filter(id__in=tags) tags = [{'id': str(tag.id), 'text': tag.name} for tag in tag_qs] filter_form.fields['tag'].widget.attrs['data-predifined'] = json.dumps(tags) filter_form.fields['tag'].widget.attrs['value'] = '' else: filter_form = BlogFilterForm() context['article_filter_form'] = filter_form return context class BlogDetail(MetadataMixin, DetailView): model = Article slug_field = 'slug' template_name = 'client/article/article.html' def get_queryset(self): qs = super(BlogDetail, self).get_queryset() return qs.filter(draft=False) class NewsTagCatalog(MetadataMixin, ListView): """ returns queryset filtered by filtered_object and dates filtered_object can be theme or tag """ model = Article template_name = 'client/article/catalog.html' catalog_url = '/news/tag/' filter_object = None year = None month = None def get_queryset(self): slug = self.kwargs.get('slug') tag = get_object_or_404(Tag, url=slug) self.kwargs['tag'] = tag self.filter_object = tag qs = Article.objects.news().filter(tag=tag) year = self.kwargs.get('year') if year: qs = qs.filter(publish_date__year=year) # info for breadscrumbs self.year = {'text': year, 'link': '%s%s/%s/'%(self.catalog_url, self.filter_object.url, year)} month = self.kwargs.get('month') monthes = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')}, 'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')}, 'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')}, 'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')}, 'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')}, 'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}} if month and monthes.get(month): qs = qs.filter(publish_date__month=monthes[month]['value']) self.month = {'text': monthes[month]['name'], 'link': '%s%s/%s/%s/'%(self.catalog_url, self.filter_object.url, year, month)} return qs def get_context_data(self, **kwargs): context = super(NewsTagCatalog, self).get_context_data(**kwargs) context['filter_object'] = self.filter_object context['year'] = self.year context['month'] = self.month context['catalog_url'] = self.catalog_url return context class BlogsFilterCatalog(MetadataMixin, ListView): model = Article template_name = 'client/article/catalog.html' catalog_url = '/blogs/tag/' filter_object = None year = None month = None def get_queryset(self, **kwargs): slug = self.kwargs.get('slug') filter_slug = self.kwargs['filter'] if filter_slug == 'tag': tag = get_object_or_404(Tag, url=slug) self.kwargs['tag'] = tag self.filter_object = tag qs = Article.objects.blogs().filter(tag=tag) else: theme = get_object_or_404(Theme, url=slug) self.kwargs['theme'] = theme self.filter_object = theme qs = Article.objects.blogs().filter(theme=theme) year = self.kwargs.get('year') if year: qs = qs.filter(publish_date__year=year) # info for breadscrumbs self.year = {'text': year, 'link': '%s%s/%s/' % (self.catalog_url, self.filter_object.url, year)} month = self.kwargs.get('month') monthes = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')}, 'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')}, 'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')}, 'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')}, 'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')}, 'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}} if month and monthes.get(month): qs = qs.filter(publish_date__month=monthes[month]['value']) self.month = {'text': monthes[month]['name'], 'link': '%s%s/%s/%s/'%(self.catalog_url, self.filter_object.url, year, month)} return qs def get_context_data(self, **kwargs): context = super(BlogsFilterCatalog, self).get_context_data(**kwargs) context['filter_object'] = self.filter_object context['type'] = 'article' context['year'] = self.year context['month'] = self.month context['catalog_url'] = self.catalog_url return context