1323: Этап №3 - Новости в событии

done
remotes/origin/search
Alexander Burdeiny 10 years ago
parent 59d3102e17
commit 52c2638dc4
  1. 2
      article/admin_urls.py
  2. 19
      article/urls.py
  3. 28
      article/views.py
  4. 30
      conference/models.py
  5. 43
      conference/views.py
  6. 35
      exposition/models.py
  7. 46
      exposition/views.py
  8. 27
      templates/admin/article/blog_form.html
  9. 31
      templates/client/article/event_news_list.html
  10. 27
      templates/client/includes/article/articles_in_event.html
  11. 2
      templates/client/includes/conference/conference_object.html
  12. 3
      templates/client/includes/exposition/expo_paid.html
  13. 2
      templates/client/includes/exposition/exposition_object.html

@ -10,4 +10,4 @@ urlpatterns = patterns('article.admin',
url(r'^news/$', NewsView.as_view()), url(r'^news/$', NewsView.as_view()),
url(r'^blog/(?P<slug>.*)/$', BlogView.as_view()), url(r'^blog/(?P<slug>.*)/$', BlogView.as_view()),
url(r'^news/(?P<slug>.*)/$', NewsView.as_view()), url(r'^news/(?P<slug>.*)/$', NewsView.as_view()),
) )

@ -1,6 +1,17 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from conference.models import Conference
from django.conf.urls import patterns, url 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('', urlpatterns = patterns('',
url(r'^blogs/tag/(?P<slug>.*)/page/(?P<page>\d+)/$', BlogsFilterCatalog.as_view(), url(r'^blogs/tag/(?P<slug>.*)/page/(?P<page>\d+)/$', BlogsFilterCatalog.as_view(),
@ -33,6 +44,12 @@ urlpatterns = patterns('',
{'meta_id': 78}), {'meta_id': 78}),
url(r'^news/$', NewsList.as_view(), url(r'^news/$', NewsList.as_view(),
{'meta_id':78}), {'meta_id':78}),
url(r'^news/expo/(?P<slug>[^/]*)/(?:page/(?P<page>\d+)/)?$', EventNewsList.as_view(),
{'event_model': Exposition}, name='news_expo'),
url(r'^news/conference/(?P<slug>[^/]*)/(?:page/(?P<page>\d+)/)?$', EventNewsList.as_view(),
{'event_model': Conference}, name='news_conference'),
url(r'^blogs/(?P<slug>.*)/$', BlogDetail.as_view(), url(r'^blogs/(?P<slug>.*)/$', BlogDetail.as_view(),
{'meta_id': 19}), {'meta_id': 19}),
url(r'^news/(?P<slug>.*)/$', NewsDetail.as_view(), url(r'^news/(?P<slug>.*)/$', NewsDetail.as_view(),

@ -60,6 +60,34 @@ class NewsList(MetadataMixin, ListView):
return context 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): class NewsDetail(MetadataMixin, DetailView):
model = Article model = Article
slug_field = 'slug' slug_field = 'slug'

@ -1,26 +1,27 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import copy
import datetime 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.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 import Q
from django.db.models.signals import post_save, pre_save from django.db.models.signals import post_save, pre_save
from django.contrib.contenttypes import generic
from django.utils import translation from django.utils import translation
from django.utils.translation import ugettext as _
from exposition.manager import ClientManager 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 functions.translate import fill_with_signal
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from photologue.models import Gallery 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 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 # 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 [] #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: else:
return [] return []
def get_news_url(self):
return reverse_lazy('news_conference', kwargs={'slug': self.url})
def get_catalog_url(self): def get_catalog_url(self):
return '/conference/' return '/conference/'

@ -1,27 +1,34 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json
import datetime 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.conf import settings
from django.http import HttpResponse, Http404, HttpResponseRedirect, HttpResponsePermanentRedirect
from django.contrib import messages from django.contrib import messages
from django.shortcuts import get_object_or_404
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.views.generic import DetailView from django.http import (
from functions.custom_views import ListView Http404,
from django.views.generic.edit import FormMixin HttpResponse,
from django.utils.translation import ugettext as _ HttpResponsePermanentRedirect,
HttpResponseRedirect
)
from django.shortcuts import get_object_or_404
from django.utils import translation from django.utils import translation
from service.models import Service from django.utils.translation import ugettext as _
from service.views import order_forms from django.views.generic import DetailView
from note.models import Note 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 models import Conference
from accounts.models import User from note.models import Note
from country.models import Country from service.models import Service
from city.models import City
from theme.models import Theme, Tag
from service.order_forms import AdvertiseForm from service.order_forms import AdvertiseForm
from meta.views import MetadataMixin from service.views import order_forms
from functions.cache_mixin import JitterCacheMixin, CacheMixin from theme.models import Tag, Theme
MONTHES = settings.MONTHES MONTHES = settings.MONTHES
@ -397,6 +404,8 @@ class ConferenceDetail(JitterCacheMixin, MetadataMixin, DetailView):
context['city'] = str(obj.city_id) context['city'] = str(obj.city_id)
context['country'] = str(obj.country_id) context['country'] = str(obj.country_id)
context['themes'] = [str(item.id) for item in obj.theme.all()] 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 return context
@ -530,4 +539,4 @@ def add_note(request, slug):
args['not_authorized'] = True args['not_authorized'] = True
args['success'] = True args['success'] = True
return HttpResponse(json.dumps(args), content_type='application/json') return HttpResponse(json.dumps(args), content_type='application/json')

@ -1,26 +1,26 @@
# -*- coding: utf-8 -*- # -*- 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 import models
from django.db.models import Q from django.db.models import Q
from django.db.models.signals import post_save, pre_save from django.db.models.signals import post_save, pre_save
from django.utils.translation import ugettext as _
from django.utils import translation from django.utils import translation
from django.conf import settings from django.utils.translation import ugettext as _
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 functions.custom_fields import EnumField from functions.custom_fields import EnumField
from functions.signal_handlers import post_save_handler, pre_save_handler from functions.db import db_table_exists
from functions.models_methods import ExpoManager
from functions.model_mixin import EventMixin, ExpoMixin 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 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'Не выбрано')), AUDIENCE1 = ((None,_(u'Не выбрано')),
('experts', _(u'Специалисты')), ('experts', _(u'Специалисты')),
@ -184,9 +184,13 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
def get_parent(self): def get_parent(self):
return {} return {}
def get_absolute_url(self): def get_absolute_url(self):
return self.get_permanent_url() return self.get_permanent_url()
def get_news_url(self):
return reverse_lazy('news_expo', kwargs={'slug': self.url})
def get_index_text(self): def get_index_text(self):
translation.activate('ru') translation.activate('ru')
translations = self.translations.all() 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()]) tags = ' '.join([' '.join(tag.get_all_names()) for tag in self.tag.all()])
return names + ' ' + titles + ' ' + themes + ' ' + tags return names + ' ' + titles + ' ' + themes + ' ' + tags
def get_note_by_user(self, user_id): def get_note_by_user(self, user_id):
note = self.note.filter(user__id=user_id) note = self.note.filter(user__id=user_id)
try: try:

@ -1,30 +1,35 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json
import datetime import datetime
from django.http import HttpResponseRedirect, HttpResponse, HttpResponsePermanentRedirect import json
from django.contrib.contenttypes.models import ContentType
from accounts.models import User
from city.models import City
from country.models import Country
from django.conf import settings from django.conf import settings
from django.views.generic import DetailView from django.contrib.contenttypes.models import ContentType
from functions.custom_views import ListView from django.core.mail import EmailMessage
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.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.views.generic.edit import FormMixin
from django.core.mail import EmailMessage from functions.cache_mixin import JitterCacheMixin
#models from functions.custom_views import ExpoSearchView, ListView
from accounts.models import User from functions.search_forms import ExpositionSearchForm
from meta.views import MetadataMixin
from models import Exposition 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 note.models import Note
from service.models import Service
from service.order_forms import AdvertiseForm from service.order_forms import AdvertiseForm
from functions.search_forms import ExpositionSearchForm from service.views import order_forms
from functions.custom_views import ExpoSearchView from theme.models import Tag, Theme
from meta.views import MetadataMixin from article.models import Article
from functions.cache_mixin import JitterCacheMixin
class ExpositionBy(JitterCacheMixin, MetadataMixin, ListView): class ExpositionBy(JitterCacheMixin, MetadataMixin, ListView):
@ -160,7 +165,8 @@ class ExpoDetail(JitterCacheMixin, MetadataMixin, DetailView):
context['city'] = str(obj.city_id) context['city'] = str(obj.city_id)
context['country'] = str(obj.country_id) context['country'] = str(obj.country_id)
context['themes'] = [str(item.id) for item in obj.theme.all()] 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 return context

@ -155,26 +155,17 @@
</div> </div>
</div> </div>
{% if form.exposition %} {% if form.draft %}
<div class="control-group {% if form.exposition.errors %}error{% endif %}"> <div class="box span8">
<label class="control-label">{{ form.exposition.label }}:</label> <div class="control-group {% if form.draft.errors %}error{% endif %}">
<div class="controls"> <label class="control-label">{{ form.draft.label }}:</label>
{{ form.exposition }} <div class="controls">
<span class="help-inline">{{ form.exposition.errors }}</span> {{ form.draft }}
<span class="help-inline">{{ form.draft.errors }}</span>
</div>
</div> </div>
</div>
{% endif %}
<dev class="box span8">
{% if form.draft %}
<div class="control-group {% if form.draft.errors %}error{% endif %}">
<label class="control-label">{{ form.draft.label }}:</label>
<div class="controls">
{{ form.draft }}
<span class="help-inline">{{ form.draft.errors }}</span>
</div>
</div> </div>
{% endif %} {% endif %}
</dev>
<div class="controls"> <div class="controls">
<input class="btn btn-large btn-primary" type="submit" value="{% if article %}Изменить{% else %}Добавить{% endif %}"> <input class="btn btn-large btn-primary" type="submit" value="{% if article %}Изменить{% else %}Добавить{% endif %}">

@ -0,0 +1,31 @@
{% extends 'base_catalog.html' %}
{% load static %}
{% load i18n %}
{% load template_filters %}
{% block bread_scrumbs %}
<div class="bread-crumbs">
<a href="/">{% trans 'Главная страница' %}</a>
<a href="/news/">{% trans 'Новости' %}</a>
<strong>{% trans 'Новости к событию' %}</strong>
</div>
{% endblock %}
{% block page_title %}
<div class="page-title">
<h1>
{% trans "Новости к событию" %} {{ event.name|safe }}
</h1>
</div>
{% 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 %}

@ -0,0 +1,27 @@
{% load static %}
{% load i18n %}
{% if news_list %}
<div class="rq-to-hide">
<div class="s-comments">
<div class="sect-title blog_link">{% trans 'Последние новости к этому событию' %}<a class="button more" href="{{ event.get_news_url }}">{% trans 'Все новости' %}</a></div>
<div class="cat-list sc-comments">
{% for news in news_list %}
<div class="cl-item">
<div class="acticle_list">
<a href="{{ news.get_permanent_url }}" title="">
<span class="cli-pict">
{% include 'includes/show_logo.html' with obj=news %}
</span>
</a>
<h3><a href="{{ news.get_permanent_url }}" title="">{{ news.main_title }}</a></h3>
<p>{{ news.preview|safe }}</p>
<strong><span>{{ news.publish_date|date:"d E Y" }}</span><a href="{{ event.get_permanent_url }}" title=""><b>{{ event.name|safe }}</b></a></strong>
</div>
<div class="clearfix"></div>
</div>
{% endfor %}
</div>
</div>
</div>
{% endif %}

@ -210,7 +210,9 @@
{% include 'client/includes/banners/detail_inner.html' %} {% include 'client/includes/banners/detail_inner.html' %}
</div> </div>
{% include "client/includes/article/articles_in_event.html" with event=event news_list=news %}
<hr /> <hr />
<div class="i-members clearfix"> <div class="i-members clearfix">
<div class="im-participants"> <div class="im-participants">
{% with companies=event.company.all|slice:":6" %} {% with companies=event.company.all|slice:":6" %}

@ -225,6 +225,9 @@
</dl> </dl>
</div> </div>
{% include "client/includes/article/articles_in_event.html" with event=exposition news_list=news %}
<hr />
<div class="i-members clearfix"> <div class="i-members clearfix">
<div class="im-participants"> <div class="im-participants">
{% with companies=exposition.company.all|slice:":6" %} {% with companies=exposition.company.all|slice:":6" %}

@ -222,6 +222,8 @@
<hr /> <hr />
{% include 'client/includes/banners/detail_inner.html' %} {% include 'client/includes/banners/detail_inner.html' %}
</div> </div>
{% include "client/includes/article/articles_in_event.html" with event=exposition news_list=news %}
<hr /> <hr />
<div class="i-members clearfix"> <div class="i-members clearfix">

Loading…
Cancel
Save