You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

256 lines
9.4 KiB

# -*- 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 models import Article
from forms import BlogFilterForm, NewsFilterForm
from theme.models import Tag, Theme
from meta.views import MetadataMixin
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