From 91ff24980c307e590263406115862306e37696a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D0=B7=D0=B0=D1=80=20=D0=9A=D0=BE=D1=82=D1=8E?= =?UTF-8?q?=D0=BA?= Date: Thu, 30 Apr 2015 19:18:23 +0300 Subject: [PATCH] BLogs and news --- article/models.py | 2 +- article/urls.py | 10 ++- article/views.py | 61 ++++++++++++++++++- meta/models.py | 2 +- settings/templatetags/tempalte_tags.py | 44 ++++++++++--- templates/client/article/catalog.html | 35 +++++++++++ templates/client/article/news.html | 2 +- templates/client/article/news_list.html | 16 +---- .../article/catalog_filter_period.html | 19 ++++++ .../client/includes/article/news_list.html | 17 ++++++ templates/client/includes/article_tags.html | 2 +- 11 files changed, 179 insertions(+), 31 deletions(-) create mode 100644 templates/client/article/catalog.html create mode 100644 templates/client/includes/article/catalog_filter_period.html create mode 100644 templates/client/includes/article/news_list.html diff --git a/article/models.py b/article/models.py index 6436b3ae..08465981 100644 --- a/article/models.py +++ b/article/models.py @@ -248,7 +248,7 @@ class Article(TranslatableModel): def similar(self): themes = [item ['id'] for item in self.theme.all().values('id')] - return list(Article.objects.language().exclude(id=self.id).filter(type=self.type, publish_date__isnull=False, theme__in=themes).order_by('-publish_date')[:3]) + return list(Article.objects.language().exclude(id=self.id).filter(type=self.type, publish_date__isnull=False, theme__in=themes).distinct().order_by('-publish_date')[:3]) from django.db.models.signals import post_save diff --git a/article/urls.py b/article/urls.py index d2476430..621c5389 100644 --- a/article/urls.py +++ b/article/urls.py @@ -1,10 +1,18 @@ # -*- coding: utf-8 -*- from django.conf.urls import patterns, url -from views import BlogList, NewsList, BlogDetail, NewsDetail +from views import BlogList, NewsList, BlogDetail, NewsDetail, NewsTagCatalog urlpatterns = patterns('', url(r'^blogs/page/(?P\d+)/$', BlogList.as_view()), url(r'^blogs/$', BlogList.as_view()), + + + url(r'^news/tag/(?P.*)/(?P\d+)/(?P.*)/page/(?P\d+)/$', NewsTagCatalog.as_view()), + url(r'^news/tag/(?P.*)/(?P\d+)/page/(?P\d+)/$', NewsTagCatalog.as_view()), + url(r'^news/tag/(?P.*)/page/(?P\d+)/$', NewsTagCatalog.as_view()), + url(r'^news/tag/(?P.*)/(?P\d+)/(?P.*)/$', NewsTagCatalog.as_view()), + url(r'^news/tag/(?P.*)/(?P\d+)/$', NewsTagCatalog.as_view()), + url(r'^news/tag/(?P.*)/$', NewsTagCatalog.as_view()), url(r'^news/page/(?P\d+)/$', NewsList.as_view()), url(r'^news/$', NewsList.as_view()), url(r'^blogs/(?P.*)/$', BlogDetail.as_view(), {'meta_id':19}), diff --git a/article/views.py b/article/views.py index a9ca6d0b..3c0d94cc 100644 --- a/article/views.py +++ b/article/views.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import json from django.views.generic import DetailView, ListView from django.http import HttpResponse @@ -106,4 +107,62 @@ class BlogList(ListView): class BlogDetail(MetadataMixin, DetailView): model = Article slug_field = 'slug' - template_name = 'article/article.html' \ No newline at end of file + template_name = 'article/article.html' + + +from exposition.views import ExpoCatalog +from django.conf import settings +from django.shortcuts import get_object_or_404 +from django.utils.translation import ugettext as _ + +class NewsTagCatalog(MetadataMixin, ListView): + 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.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 + + + + + + + + return qs \ No newline at end of file diff --git a/meta/models.py b/meta/models.py index e8efbed1..e93a489f 100644 --- a/meta/models.py +++ b/meta/models.py @@ -49,7 +49,7 @@ class MetaSetting(TranslatableModel): h1 = models.CharField(max_length=255, blank=True), ) - object_params = {'object_name': 'name', 'object_title': 'main_title'} + object_params = {'object_name': 'name', 'object_title': 'main_title', 'city': 'city'} params = {'month': get_month_inflect, 'country': get_obj_inflect, 'city': get_obj_inflect, 'theme': get_theme_inflect, 'tag': get_tag_inflect} diff --git a/settings/templatetags/tempalte_tags.py b/settings/templatetags/tempalte_tags.py index 4f866ce5..aa540f89 100644 --- a/settings/templatetags/tempalte_tags.py +++ b/settings/templatetags/tempalte_tags.py @@ -11,9 +11,10 @@ register = template.Library() class Date(template.Node): - def __init__(self): + def __init__(self, reverse=False): date = datetime.datetime.today().replace(day=1) self.now = date + self.reverse = reverse def render(self, context): @@ -27,16 +28,35 @@ class Date(template.Node): date = self.now month = monthes[date.month] month_period =[{'month_url': month['url'], 'name':month['name'], 'date':date}] - for i in range(5): - try: - date = date.replace(month=date.month+1) - except ValueError: - if date.month == 12: - date = date.replace(year=date.year+1, month=1) + if not self.reverse: + for i in range(5): + try: + date = date.replace(month=date.month+1) + except ValueError: + if date.month == 12: + date = date.replace(year=date.year+1, month=1) + else: + raise + month = monthes.get(date.month) + month_period.append({'month_url': month['url'], 'name':month['name'], 'date':date}) + else: + for i in range(5): + month = date.month - 1 + if month == 0: + date = date.replace(year=date.year-1, month=12) else: - raise - month = monthes.get(date.month) - month_period.append({'month_url': month['url'], 'name':month['name'], 'date':date}) + date = date.replace(month=date.month-1) + """ + try: + date = date.replace(month=date.month-1) + except ValueError: + if date.month == 0: + date = date.replace(year=date.year-1, month=12) + else: + raise + """ + month = monthes.get(date.month) + month_period.append({'month_url': month['url'], 'name':month['name'], 'date':date}) context['monthes_period'] = month_period return u"" @@ -48,6 +68,9 @@ def get_date(parser, token): return Date() +def get_date_reverse(parser, token): + return Date(reverse=True) + class SetVarNode(template.Node): def __init__(self, var_name, var_value): @@ -73,4 +96,5 @@ def set_var(parser, token): register.tag('set', set_var) register.tag('get_date', get_date) +register.tag('get_date_reverse', get_date_reverse) diff --git a/templates/client/article/catalog.html b/templates/client/article/catalog.html new file mode 100644 index 00000000..168396aa --- /dev/null +++ b/templates/client/article/catalog.html @@ -0,0 +1,35 @@ +{% extends 'base_catalog.html' %} +{% load template_filters %} +{% load i18n %} + + +{% block bread_scrumbs %} + +{% endblock %} + + +{% block page_title %} +
+

{% if meta %}{{ meta.h1 }}{% else %}{% trans 'Новости' %}: {{ filter_object.name }}{% endif %}

+
+ {% include 'includes/article/catalog_filter_period.html' %} +{% endblock %} + +{% block content_list %} +{% include 'client/includes/article/news_list.html' with object_list=object_list %} +{% endblock %} diff --git a/templates/client/article/news.html b/templates/client/article/news.html index 3ab166c5..2ac5f761 100644 --- a/templates/client/article/news.html +++ b/templates/client/article/news.html @@ -28,7 +28,7 @@
{% trans 'Источник' %}: {{ object.author }} {% if object.tag.all.exists %} - {% include 'includes/article_tags.html' with obj=object %} + {% include 'client/includes/article_tags.html' with obj=object %} {% endif %}
diff --git a/templates/client/article/news_list.html b/templates/client/article/news_list.html index 00697608..532611eb 100644 --- a/templates/client/article/news_list.html +++ b/templates/client/article/news_list.html @@ -35,21 +35,7 @@ -
-
- {% for news in object_list %} -
-
- - {% include 'includes/article/news_preview.html' with obj=news %} -

{{ news.main_title }}

- {{ news.preview }} - {{ news.publish_date|date:"d E Y" }}{% with event=news.get_event %}{% if event %}{{ event.name }}{% endif %}{% endwith %} -
-
- {% endfor %} -
-
+{% include 'client/includes/article/news_list.html' with object_list=object_list %} {% if request.GET.debug == '1' %} {% else %} diff --git a/templates/client/includes/article/catalog_filter_period.html b/templates/client/includes/article/catalog_filter_period.html new file mode 100644 index 00000000..d6dcdd2b --- /dev/null +++ b/templates/client/includes/article/catalog_filter_period.html @@ -0,0 +1,19 @@ +{% load i18n %} +{% load template_filters %} +{% load tempalte_tags %} + + +{% if month or year %} +{% else %} + {% get_date_reverse %} +
+
+
{% trans 'Период' %}:
+ {% with path=request.path|without_page now=now %} + {% for month in monthes_period %} + {{ month.name|lower }} {{ month.date|date:'Y' }}{% if month != monthes_period|last %},{% endif %} + {% endfor %} + {% endwith %} +
+
+{% endif %} diff --git a/templates/client/includes/article/news_list.html b/templates/client/includes/article/news_list.html new file mode 100644 index 00000000..e2f2709f --- /dev/null +++ b/templates/client/includes/article/news_list.html @@ -0,0 +1,17 @@ + + +
+
+ {% for news in object_list %} +
+
+ + {% include 'includes/article/news_preview.html' with obj=news %} +

{{ news.main_title }}

+ {{ news.preview }} + {{ news.publish_date|date:"d E Y" }}{% with event=news.get_event %}{% if event %}{{ event.name }}{% endif %}{% endwith %} +
+
+ {% endfor %} +
+
\ No newline at end of file diff --git a/templates/client/includes/article_tags.html b/templates/client/includes/article_tags.html index 265109ef..32ab461c 100644 --- a/templates/client/includes/article_tags.html +++ b/templates/client/includes/article_tags.html @@ -1,6 +1,6 @@ {% with tags=obj.tag.all %} {% for tag in obj.tag.all %} - {{ tag.name }}{% if forloop.counter != tags|length %},{% endif %} + {{ tag.name }}{% if forloop.counter != tags|length %},{% endif %} {% endfor %} {% endwith %} \ No newline at end of file