diff --git a/article/admin_urls.py b/article/admin_urls.py index 6c0bc9af..220fa796 100644 --- a/article/admin_urls.py +++ b/article/admin_urls.py @@ -10,4 +10,4 @@ urlpatterns = patterns('article.admin', url(r'^news/$', NewsView.as_view()), url(r'^blog/(?P.*)/$', BlogView.as_view()), url(r'^news/(?P.*)/$', NewsView.as_view()), -) \ No newline at end of file +) diff --git a/article/urls.py b/article/urls.py index afb5802c..6897cc7f 100644 --- a/article/urls.py +++ b/article/urls.py @@ -1,6 +1,17 @@ # -*- coding: utf-8 -*- +from conference.models import Conference from django.conf.urls import patterns, url -from views import BlogList, NewsList, BlogDetail, NewsDetail, NewsTagCatalog, BlogsFilterCatalog +from exposition.models import Exposition + +from .views import ( + BlogDetail, + BlogList, + BlogsFilterCatalog, + EventNewsList, + NewsDetail, + NewsList, + NewsTagCatalog +) urlpatterns = patterns('', url(r'^blogs/tag/(?P.*)/page/(?P\d+)/$', BlogsFilterCatalog.as_view(), @@ -33,6 +44,12 @@ urlpatterns = patterns('', {'meta_id': 78}), url(r'^news/$', NewsList.as_view(), {'meta_id':78}), + + url(r'^news/expo/(?P[^/]*)/(?:page/(?P\d+)/)?$', EventNewsList.as_view(), + {'event_model': Exposition}, name='news_expo'), + url(r'^news/conference/(?P[^/]*)/(?:page/(?P\d+)/)?$', EventNewsList.as_view(), + {'event_model': Conference}, name='news_conference'), + url(r'^blogs/(?P.*)/$', BlogDetail.as_view(), {'meta_id': 19}), url(r'^news/(?P.*)/$', NewsDetail.as_view(), diff --git a/article/views.py b/article/views.py index bea635c3..6015fdfe 100644 --- a/article/views.py +++ b/article/views.py @@ -60,6 +60,34 @@ class NewsList(MetadataMixin, ListView): 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' diff --git a/conference/models.py b/conference/models.py index a96676b1..594cde5c 100644 --- a/conference/models.py +++ b/conference/models.py @@ -1,26 +1,27 @@ # -*- coding: utf-8 -*- + +import copy import datetime -from django.utils.translation import ugettext as _ -from django.db import models + +from bitfield import BitField from django.conf import settings +from django.contrib.contenttypes import generic +from django.core.urlresolvers import reverse_lazy +from django.db import models from django.db.models import Q from django.db.models.signals import post_save, pre_save -from django.contrib.contenttypes import generic from django.utils import translation +from django.utils.translation import ugettext as _ from exposition.manager import ClientManager -from hvad.models import TranslatableModel, TranslatedFields, TranslationManager +from functions.custom_fields import EnumField +from functions.db import db_table_exists +from functions.model_mixin import EventMixin, ExpoMixin +from functions.models_methods import ExpoManager, hvad_to_dict +from functions.signal_handlers import post_save_handler, pre_save_handler from functions.translate import fill_with_signal +from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from photologue.models import Gallery -from functions.signal_handlers import post_save_handler, pre_save_handler -import copy -from bitfield import BitField from service.models import Service -from functions.db import db_table_exists -#custom functions -from functions.custom_fields import EnumField -from functions.models_methods import ExpoManager -from functions.model_mixin import EventMixin, ExpoMixin -from functions.models_methods import hvad_to_dict # check if table exist and create flags if true #flags = [item.url for item in Service.objects.all()] if db_table_exists('service_service') else [] @@ -149,6 +150,9 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin): else: return [] + def get_news_url(self): + return reverse_lazy('news_conference', kwargs={'slug': self.url}) + def get_catalog_url(self): return '/conference/' diff --git a/conference/views.py b/conference/views.py index d89d3437..a39499d3 100644 --- a/conference/views.py +++ b/conference/views.py @@ -1,27 +1,34 @@ # -*- coding: utf-8 -*- -import json import datetime +import json + +from accounts.models import User +from article.models import Article +from city.models import City +from country.models import Country from django.conf import settings -from django.http import HttpResponse, Http404, HttpResponseRedirect, HttpResponsePermanentRedirect from django.contrib import messages -from django.shortcuts import get_object_or_404 from django.contrib.contenttypes.models import ContentType -from django.views.generic import DetailView -from functions.custom_views import ListView -from django.views.generic.edit import FormMixin -from django.utils.translation import ugettext as _ +from django.http import ( + Http404, + HttpResponse, + HttpResponsePermanentRedirect, + HttpResponseRedirect +) +from django.shortcuts import get_object_or_404 from django.utils import translation -from service.models import Service -from service.views import order_forms -from note.models import Note +from django.utils.translation import ugettext as _ +from django.views.generic import DetailView +from django.views.generic.edit import FormMixin +from functions.cache_mixin import CacheMixin, JitterCacheMixin +from functions.custom_views import ListView +from meta.views import MetadataMixin from models import Conference -from accounts.models import User -from country.models import Country -from city.models import City -from theme.models import Theme, Tag +from note.models import Note +from service.models import Service from service.order_forms import AdvertiseForm -from meta.views import MetadataMixin -from functions.cache_mixin import JitterCacheMixin, CacheMixin +from service.views import order_forms +from theme.models import Tag, Theme MONTHES = settings.MONTHES @@ -397,6 +404,8 @@ class ConferenceDetail(JitterCacheMixin, MetadataMixin, DetailView): context['city'] = str(obj.city_id) context['country'] = str(obj.country_id) context['themes'] = [str(item.id) for item in obj.theme.all()] + context['news'] = Article.objects.news()\ + .filter(publish_date__isnull=False, conference=obj).order_by('-publish_date')[:3] return context @@ -530,4 +539,4 @@ def add_note(request, slug): args['not_authorized'] = True args['success'] = True - return HttpResponse(json.dumps(args), content_type='application/json') \ No newline at end of file + return HttpResponse(json.dumps(args), content_type='application/json') diff --git a/exposition/models.py b/exposition/models.py index 0942e1be..2668150b 100644 --- a/exposition/models.py +++ b/exposition/models.py @@ -1,26 +1,26 @@ # -*- coding: utf-8 -*- -import copy, datetime +import copy +import datetime + +from bitfield import BitField +from django.conf import settings +from django.contrib.contenttypes import generic +from django.core.urlresolvers import reverse_lazy from django.db import models from django.db.models import Q from django.db.models.signals import post_save, pre_save -from django.utils.translation import ugettext as _ from django.utils import translation -from django.conf import settings -from hvad.models import TranslatableModel, TranslatedFields, TranslationManager -from django.contrib.contenttypes import generic -from bitfield import BitField -from service.models import Service -from functions.db import db_table_exists -from organiser.models import Organiser -from manager import ClientManager +from django.utils.translation import ugettext as _ from functions.custom_fields import EnumField -from functions.signal_handlers import post_save_handler, pre_save_handler -from functions.models_methods import ExpoManager +from functions.db import db_table_exists from functions.model_mixin import EventMixin, ExpoMixin - +from functions.models_methods import ExpoManager, hvad_to_dict +from functions.signal_handlers import post_save_handler, pre_save_handler +from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from import_xls.model_utils import ExpoImportManager -from functions.models_methods import hvad_to_dict - +from manager import ClientManager +from organiser.models import Organiser +from service.models import Service AUDIENCE1 = ((None,_(u'Не выбрано')), ('experts', _(u'Специалисты')), @@ -184,9 +184,13 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin): def get_parent(self): return {} + def get_absolute_url(self): return self.get_permanent_url() + def get_news_url(self): + return reverse_lazy('news_expo', kwargs={'slug': self.url}) + def get_index_text(self): translation.activate('ru') translations = self.translations.all() @@ -196,7 +200,6 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin): tags = ' '.join([' '.join(tag.get_all_names()) for tag in self.tag.all()]) return names + ' ' + titles + ' ' + themes + ' ' + tags - def get_note_by_user(self, user_id): note = self.note.filter(user__id=user_id) try: diff --git a/exposition/views.py b/exposition/views.py index 9bdbc35b..baec2baa 100644 --- a/exposition/views.py +++ b/exposition/views.py @@ -1,30 +1,35 @@ # -*- coding: utf-8 -*- -import json + import datetime -from django.http import HttpResponseRedirect, HttpResponse, HttpResponsePermanentRedirect -from django.contrib.contenttypes.models import ContentType +import json + +from accounts.models import User +from city.models import City +from country.models import Country from django.conf import settings -from django.views.generic import DetailView -from functions.custom_views import ListView -from django.utils.translation import ugettext as _ +from django.contrib.contenttypes.models import ContentType +from django.core.mail import EmailMessage +from django.http import ( + Http404, + HttpResponse, + HttpResponsePermanentRedirect, + HttpResponseRedirect +) from django.shortcuts import get_object_or_404 -from django.http import Http404 +from django.utils.translation import ugettext as _ +from django.views.generic import DetailView from django.views.generic.edit import FormMixin -from django.core.mail import EmailMessage -#models -from accounts.models import User +from functions.cache_mixin import JitterCacheMixin +from functions.custom_views import ExpoSearchView, ListView +from functions.search_forms import ExpositionSearchForm +from meta.views import MetadataMixin from models import Exposition -from service.views import order_forms -from service.models import Service -from country.models import Country -from city.models import City -from theme.models import Theme, Tag from note.models import Note +from service.models import Service from service.order_forms import AdvertiseForm -from functions.search_forms import ExpositionSearchForm -from functions.custom_views import ExpoSearchView -from meta.views import MetadataMixin -from functions.cache_mixin import JitterCacheMixin +from service.views import order_forms +from theme.models import Tag, Theme +from article.models import Article class ExpositionBy(JitterCacheMixin, MetadataMixin, ListView): @@ -160,7 +165,8 @@ class ExpoDetail(JitterCacheMixin, MetadataMixin, DetailView): context['city'] = str(obj.city_id) context['country'] = str(obj.country_id) context['themes'] = [str(item.id) for item in obj.theme.all()] - + context['news'] = Article.objects.news()\ + .filter(publish_date__isnull=False, exposition=obj).order_by('-publish_date')[:3] return context diff --git a/templates/admin/article/blog_form.html b/templates/admin/article/blog_form.html index ff38291d..f95d1974 100644 --- a/templates/admin/article/blog_form.html +++ b/templates/admin/article/blog_form.html @@ -155,26 +155,17 @@ - {% if form.exposition %} -
- -
- {{ form.exposition }} - {{ form.exposition.errors }} + {% if form.draft %} +
+
+ +
+ {{ form.draft }} + {{ form.draft.errors }} +
-
- {% endif %} - - {% if form.draft %} -
- -
- {{ form.draft }} - {{ form.draft.errors }} -
- {% endif %} -
+ {% endif %}
diff --git a/templates/client/article/event_news_list.html b/templates/client/article/event_news_list.html new file mode 100644 index 00000000..30b51e8a --- /dev/null +++ b/templates/client/article/event_news_list.html @@ -0,0 +1,31 @@ +{% extends 'base_catalog.html' %} +{% load static %} +{% load i18n %} +{% load template_filters %} + + +{% block bread_scrumbs %} + +{% endblock %} + + +{% block page_title %} +
+

+ {% trans "Новости к событию" %} {{ event.name|safe }} +

+
+{% endblock %} + + +{% block content_list %} + {% include 'client/includes/article/news_list.html' with object_list=object_list %} +{% endblock %} + +{% block paginator %} + {% include 'client/includes/catalog_paginator.html' with page_obj=page_obj %} +{% endblock %} diff --git a/templates/client/includes/article/articles_in_event.html b/templates/client/includes/article/articles_in_event.html new file mode 100644 index 00000000..247eb6a1 --- /dev/null +++ b/templates/client/includes/article/articles_in_event.html @@ -0,0 +1,27 @@ +{% load static %} +{% load i18n %} + +{% if news_list %} +
+
+ +
+ {% for news in news_list %} +
+
+ + + {% include 'includes/show_logo.html' with obj=news %} + + +

{{ news.main_title }}

+

{{ news.preview|safe }}

+ {{ news.publish_date|date:"d E Y" }}{{ event.name|safe }} +
+
+
+ {% endfor %} +
+
+
+{% endif %} diff --git a/templates/client/includes/conference/conference_object.html b/templates/client/includes/conference/conference_object.html index f4c4ab9c..2d6e10e2 100644 --- a/templates/client/includes/conference/conference_object.html +++ b/templates/client/includes/conference/conference_object.html @@ -210,7 +210,9 @@ {% include 'client/includes/banners/detail_inner.html' %}
+ {% include "client/includes/article/articles_in_event.html" with event=event news_list=news %}
+
{% with companies=event.company.all|slice:":6" %} diff --git a/templates/client/includes/exposition/expo_paid.html b/templates/client/includes/exposition/expo_paid.html index 20057580..71f1df18 100644 --- a/templates/client/includes/exposition/expo_paid.html +++ b/templates/client/includes/exposition/expo_paid.html @@ -225,6 +225,9 @@
+ {% include "client/includes/article/articles_in_event.html" with event=exposition news_list=news %} +
+
{% with companies=exposition.company.all|slice:":6" %} diff --git a/templates/client/includes/exposition/exposition_object.html b/templates/client/includes/exposition/exposition_object.html index 90c3c14c..29fae9d3 100644 --- a/templates/client/includes/exposition/exposition_object.html +++ b/templates/client/includes/exposition/exposition_object.html @@ -222,6 +222,8 @@
{% include 'client/includes/banners/detail_inner.html' %}
+ + {% include "client/includes/article/articles_in_event.html" with event=exposition news_list=news %}