diff --git a/article/admin.py b/article/admin.py index 28d7d132..62f22d21 100644 --- a/article/admin.py +++ b/article/admin.py @@ -194,6 +194,7 @@ class BlogView(FormView): class NewsList(ListView): model = Article template_name = 'article/article_admin_list.html' + paginate_by = 20 def get_queryset(self): return self.model.objects.news() diff --git a/article/management/commands/article_load.py b/article/management/commands/article_load.py new file mode 100644 index 00000000..70130815 --- /dev/null +++ b/article/management/commands/article_load.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +import xlrd +from django.core.management.base import BaseCommand +from django.conf import settings +from article.models import Article +from import_xls.excel_settings import article_sett +from django.db import IntegrityError + + +NEWS_FILE = settings.MEDIA_ROOT+'/import/news.xls' + + +class Command(BaseCommand): + def handle(self, *args, **options): + + f = open(NEWS_FILE, 'r') + book = xlrd.open_workbook(file_contents=f.read()) + sheet = book.sheet_by_index(0) + row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)] + labels = [label for label in row_list[0]] + existing = 0 + for row_number, row in enumerate(row_list[2:]): + + published = row[4] + if row[0] != '': + # in first column ids + try: + object = Article.objects.language('ru').get(id=int(row[0])) + object.type = Article.news + object.save() + print(object.type) + continue + except ValueError: + + object = Article(type=Article.news) + object.translate('ru') + except Article.DoesNotExist: + object = Article(id= int(row[0])) + object.translate('ru') + existing += 1 + else: + # if id blank - its a new place + object = Article(type=Article.news) + object.translate('ru') + + for col_number, cell in enumerate(row): + + label = labels[col_number] + setting = article_sett.get(label) + if setting is None: + continue + + field_name = setting['field'] + func = setting.get('func') + value = func(cell) + setattr(object, field_name, value) + object.publish_date = published + try: + object.save() + except Exception, e: + print(e) + diff --git a/article/management/commands/news_from_old.py b/article/management/commands/news_from_old.py index a1971cf8..e8706c32 100644 --- a/article/management/commands/news_from_old.py +++ b/article/management/commands/news_from_old.py @@ -10,9 +10,9 @@ from django.db import IntegrityError class Command(BaseCommand): def handle(self, *args, **options): db = MySQLdb.connect(host="localhost", - user="kotzilla", - passwd="qazedc", - db="old_expomap", + user="expomap", + passwd="7FbLtAGjse", + db="old_db", charset='utf8', cursorclass=DictCursor) cursor = db.cursor() @@ -22,18 +22,34 @@ class Command(BaseCommand): cid as author, date_added as created - FROM `latest_news` order by created DESC""" + FROM `latest_news` + WHERE status = 1 + AND `date_added` >= '2015-04-03' + order by created DESC""" cursor.execute(sql) result = cursor.fetchall() user = User.objects.get(id=1) - Article.objects.news().delete() + #Article.objects.news().delete() for a in result: + title = a['main_title'] + id = a['id'] + published = a['created'] + #try: + # news = Article.objects.get(id=id) + #except Article.DoesNotExist: + # continue + + #news.publish_date = published + #news.save() + if len(a['main_title'])>255 or not a['main_title']: continue + + article = Article(type=Article.news, id=a['id'], created=a['created']) @@ -58,5 +74,6 @@ class Command(BaseCommand): + #print(a['main_title']) diff --git a/article/management/commands/update_news.py b/article/management/commands/update_news.py new file mode 100644 index 00000000..50329f04 --- /dev/null +++ b/article/management/commands/update_news.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +import MySQLdb +import datetime +from django.utils.translation import activate +from MySQLdb.cursors import DictCursor +from django.core.management.base import BaseCommand, CommandError +from django.conf import settings +import xlrd +from import_xls.utils import to_theme, to_tag +from functions.translate import fill_with_signal +from article.models import Article +from accounts.models import User +from django.db import IntegrityError +from exposition.models import Exposition + +NEWS_FILE = settings.MEDIA_ROOT+'/import/exported_news.xls' +BLOGS_FILE = settings.MEDIA_ROOT+'/import/blogs.xls' + + + +class Command(BaseCommand): + def handle(self, *args, **options): + activate('ru') + f = open(BLOGS_FILE, 'r') + book = xlrd.open_workbook(file_contents=f.read()) + sheet = book.sheet_by_index(0) + row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)] + + + + + print(len(row_list)) + + + existing = 0 + + + for row_number, row in enumerate(row_list[2:]): + + id = int(row[0]) + if id == 49: + continue + + main_title = row[1] + theme = row[2] + tag = row[3] + description = row[4] + article = Article.objects.language('ru').get(id=id) + #article.main_title = main_title + #article.description = description + #article.save() + + + to_theme(article, theme) + to_tag(article, tag) + print(id) + """ + try: + expo = Exposition.objects.filter(translations__name=event)[0] + except IndexError: + expo = None + + if expo: + article.exposition = expo + article.save() + print(id) + """ + + diff --git a/article/models.py b/article/models.py index b28b1ba0..6436b3ae 100644 --- a/article/models.py +++ b/article/models.py @@ -3,6 +3,7 @@ import copy from django.db import models from django.contrib.contenttypes import generic from django.utils.translation import ugettext_lazy as _ +from django.utils import translation from django.utils.timezone import now from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from django.utils.html import strip_tags @@ -10,10 +11,12 @@ from sorl.thumbnail import ImageField from functions.url_utils import slugify, unique_slug from functions.model_utils import base_concrete_model from functions.form_check import translit_with_separator +from django.core.cache import cache class ArticleManager(TranslationManager): + cache_time = 60 def safe_get(self, **kwargs): model = self.model try: @@ -35,6 +38,30 @@ class ArticleManager(TranslationManager): model = self.model return self.language().filter(type=model.blog) + def main_page_news(self): + lang = translation.get_language() + key = 'main_page_news_%s'%lang + cached_news = cache.get(key) + if cached_news: + return cached_news + else: + news = list(self.news().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date')[:3]) + cache.set(key, news, self.cache_time) + return news + + def main_page_blogs(self): + lang = translation.get_language() + key = 'main_page_blogs_%s'%lang + cached_blogs = cache.get(key) + if cached_blogs: + return cached_blogs + else: + blogs = list(self.blogs().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date')[:3]) + cache.set(key, blogs, self.cache_time) + return blogs + + return list(self.blogs().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date')[:3]) + class Article(TranslatableModel): """ Create Article model @@ -213,6 +240,16 @@ class Article(TranslatableModel): return preview[0] else: return None + def get_catalog(self): + if self.type == 1: + return '/blogs/' + elif self.type == 2: + return '/news/' + + 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]) + from django.db.models.signals import post_save from functions.signal_handlers import post_save_handler diff --git a/article/views.py b/article/views.py index c4d6ea94..a9ca6d0b 100644 --- a/article/views.py +++ b/article/views.py @@ -29,7 +29,7 @@ class NewsList(ListView): return qs else: - return self.model.objects.news() + return self.model.objects.news().filter(publish_date__isnull=False).order_by('-publish_date') def get_context_data(self, **kwargs): context = super(NewsList, self).get_context_data(object_list=self.object_list) diff --git a/conference/management/commands/conf_load.py b/conference/management/commands/conf_load.py index 88504c25..b03c8092 100644 --- a/conference/management/commands/conf_load.py +++ b/conference/management/commands/conf_load.py @@ -8,12 +8,13 @@ from django.db import IntegrityError CONF_FILE = settings.MEDIA_ROOT+'/import/conf.xls' +ADDCONF_FILE = settings.MEDIA_ROOT+'/import/add_conf.xls' class Command(BaseCommand): def handle(self, *args, **options): - f = open(CONF_FILE, 'r') + f = open(ADDCONF_FILE, 'r') book = xlrd.open_workbook(file_contents=f.read()) sheet = book.sheet_by_index(0) row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)] @@ -21,6 +22,8 @@ class Command(BaseCommand): existing = 0 + + for row_number, row in enumerate(row_list[1:]): if row[0] != '': try: @@ -93,3 +96,4 @@ class Command(BaseCommand): continue else: func(object, method['value']) + diff --git a/exposition/admin.py b/exposition/admin.py index 4d73f439..a5b1164e 100644 --- a/exposition/admin.py +++ b/exposition/admin.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import json from django.shortcuts import render_to_response from django.http import HttpResponseRedirect, HttpResponse from django.core.context_processors import csrf @@ -8,6 +9,7 @@ from django.forms.models import modelformset_factory from django.contrib.contenttypes.models import ContentType from django.contrib.auth.decorators import login_required # models and forms +from haystack.query import SearchQuerySet from models import Exposition, TimeTable, Statistic, TmpTimeTable from forms import ExpositionCreateForm, ExpositionDeleteForm, TimeTableForm, StatisticForm, ExpositionFilterForm from theme.models import Tag @@ -360,4 +362,26 @@ class ExpositionListView(AdminListView): def upload_exposition_photo(request, expo_id): - return upload_photo(request, expo_id, Exposition) \ No newline at end of file + return upload_photo(request, expo_id, Exposition) + + +def get_by_lang(item, field, lang='en'): + """ + + :param item: searchresult object + field: translated field + :return: + """ + return getattr(item, field+'_'+lang) +from django.utils import translation + +def search_expo(request): + term = request.GET['term'].capitalize() + lang = translation.get_language() + if not term: + qs = SearchQuerySet().models(Exposition).order_by('text')[:30] + else: + qs = SearchQuerySet().models(Exposition).autocomplete(content_auto=term).order_by('text')[:30] + result = [{'id': item.pk, 'label': get_by_lang(item, 'name', lang)} for item in qs] + + return HttpResponse(json.dumps(result), content_type='application/json') \ No newline at end of file diff --git a/exposition/admin_urls.py b/exposition/admin_urls.py index 5c8da315..07715753 100644 --- a/exposition/admin_urls.py +++ b/exposition/admin_urls.py @@ -11,8 +11,11 @@ urlpatterns = patterns('exposition.admin', url(r'^all/$', ExpositionListView.as_view()), url(r'^switch/(?P.*)/(?P.*)$', 'exposition_switch'), #url(r'^copy/(?P.*)$', 'exposition_copy'), + url(r'^search/$', 'search_expo'), url(r'^(?P.*)/$', ExpositionView.as_view()), + url(r'^$', ExpositionView.as_view()), + ) diff --git a/exposition/management/commands/exposition_load.py b/exposition/management/commands/exposition_load.py index 447099d4..5989b965 100644 --- a/exposition/management/commands/exposition_load.py +++ b/exposition/management/commands/exposition_load.py @@ -5,6 +5,7 @@ from django.conf import settings from exposition.models import Exposition from import_xls.excel_settings import event_sett from django.db import IntegrityError +from django.utils import translation CHINA_FILE = settings.MEDIA_ROOT+'/import/expo_china_ru.xlsx' GERMANY_FILE = settings.MEDIA_ROOT+'/import/expo_germany_ru.xlsx' @@ -17,22 +18,29 @@ LA_FILE = settings.MEDIA_ROOT+'/import/expo_la.xlsx' NA_EU_ASIA_FILE = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa.xls' NA_EU_ASIA_FILE2 = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa_part2.xls' RUSSIA_FILE = settings.MEDIA_ROOT+'/import/expo_russia.xls' +GEORGIA_FILE = settings.MEDIA_ROOT+'/import/georgia.xls' class Command(BaseCommand): def handle(self, *args, **options): - f = open(RUSSIA_FILE, 'r') + + f = open(GEORGIA_FILE, 'r') book = xlrd.open_workbook(file_contents=f.read()) + sheet = book.sheet_by_index(0) row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)] labels = [label for label in row_list[0]] existing = 0 + + for row_number, row in enumerate(row_list[1:]): #print(row_number) + name = row[2] if row[0] != '': # in first column ids + try: object = Exposition.objects.language('ru').get(id=int(row[0])) existing += 1 @@ -49,6 +57,15 @@ class Command(BaseCommand): # if id blank - its a new place object = Exposition() object.translate('ru') + """ + try: + object = Exposition.objects.language('ru').filter(translations__name=name)[0] + existing += 1 + except IndexError: + pass + """ + + methods = [] for col_number, cell in enumerate(row): @@ -83,12 +100,13 @@ class Command(BaseCommand): pass else: setattr(object, field_name, value) + + try: object.save() except IntegrityError: continue - print('post save %s'% str(object)) @@ -101,3 +119,5 @@ class Command(BaseCommand): continue else: func(object, method['value']) + + print(existing) diff --git a/import_xls/excel_settings.py b/import_xls/excel_settings.py index e7d7dcaa..e86715eb 100644 --- a/import_xls/excel_settings.py +++ b/import_xls/excel_settings.py @@ -330,6 +330,17 @@ place_exp_sett = { u'Мобильное приложение':{u'field': u'mobile_application', u'func': bool}, } + + + +article_sett = { + u'ID':{u'field': u'id', u'func': to_int}, + u'Заголовок':{u'field': u'main_title', u'func': unicode}, + u'Описание':{u'field': u'description', u'func': unicode}, + u'Айди автора':{u'field': u'author', u'func': to_user}, + u'Создана':{u'field': u'created', u'func': to_datetime} +} + event_sett = { u'ID':{u'field': u'id', u'func': to_int}, u'Url':{u'field': u'url', u'func': unicode}, diff --git a/import_xls/utils.py b/import_xls/utils.py index 8c010760..904b69d4 100644 --- a/import_xls/utils.py +++ b/import_xls/utils.py @@ -12,6 +12,7 @@ from city.models import City from theme.models import Theme, Tag from functions.files import get_alternative_filename from exposition.models import BIT_AUDIENCE +from accounts.models import User def to_int(val): @@ -29,12 +30,23 @@ def to_date(value): return None if isinstance(value, unicode) or isinstance(value, str): - - t = time.strptime(value, "%d.%m.%Y") + try: + t = time.strptime(value, "%d.%m.%Y") + except ValueError: + t = time.strptime(value, "%d/%m/%Y") if isinstance(value, float): t = xlrd.xldate_as_tuple(value, 0)+(0,0,0) + return time.strftime("%Y-%m-%d", t) +def to_datetime(value): + if not value: + return None + if isinstance(value, unicode) or isinstance(value, str): + t = time.strptime(value, "%Y-%m-%d %H:%M:%S") + return time.strftime("%Y-%m-%d %H:%M:%S", t) + + def to_country(value): try: query = get_translation_aware_manager(Country) @@ -72,6 +84,9 @@ def to_theme(obj, value): else: theme_ids = value.split(',') + if theme_ids == ['']: + return + obj.theme.clear() obj.theme.add(*Theme.objects.filter(id__in=theme_ids)) def to_tag(obj,value): @@ -80,6 +95,7 @@ def to_tag(obj,value): names = value.split(',') translation.activate('en') if names: + obj.tag.clear() obj.tag.add(*Tag.objects.filter(translations__name__in=names, theme__in=obj.theme.all())) else: return @@ -190,4 +206,11 @@ def check_quality_label(obj, value, label): return bit if value: setattr(bit, label, True) - return bit \ No newline at end of file + return bit + +def to_user(value): + try: + return User.objects.get(id=value) + except User.DoesNotExist: + + return User.objects.get(id=1) \ No newline at end of file diff --git a/proj/views.py b/proj/views.py index 7c5a3052..4879ea3a 100644 --- a/proj/views.py +++ b/proj/views.py @@ -17,15 +17,15 @@ from accounts.forms import RegistrationCompleteForm def expo_context(request): cont = {'theme_search_form': ThemeSearch(), 'expo_catalog': Exposition.catalog, - 'book_aid': settings.BOOKING_AID} + 'book_aid': settings.BOOKING_AID, 'blogs': Article.objects.main_page_blogs(), + 'news_list': Article.objects.main_page_news() + } user = request.user if not user.is_anonymous() and not user.url: cont.update({'reg_complete': RegistrationCompleteForm(instance=user)}) if not request.GET: cont.update({'search_form': ExpositionSearchForm()}) - - return cont @@ -34,16 +34,13 @@ class MainPageView(TemplateView): def get_context_data(self, **kwargs): context = super(MainPageView, self).get_context_data(**kwargs) - events = Exposition.objects.language().filter(main_page=1) + + events = Exposition.objects.language().select_related('country', 'city', 'place').filter(main_page=1) exposition_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.exposition)[:6] conference_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.conference)[:6] - news_list = Article.objects.news().filter(main_page=1) - blogs = Article.objects.blogs().filter(main_page=1) - - args = {'events': events, 'exposition_themes': exposition_themes, - 'conference_themes': conference_themes, 'news_list': news_list, - 'blogs': blogs, 'search_form': ExpositionSearchForm, 'search_action': '/expo/search/'} + args = {'events': events, 'exposition_themes': exposition_themes, 'conference_themes': conference_themes, + 'search_form': ExpositionSearchForm, 'search_action': '/expo/search/'} context.update(args) diff --git a/service/views.py b/service/views.py index 65a570a9..b8287d85 100644 --- a/service/views.py +++ b/service/views.py @@ -47,6 +47,8 @@ def advertise(request): response['errors'] = form.errors return HttpResponse(json.dumps(response), content_type='application/json') + else: + raise HttpResponse('not ajax') from service.models import CallBack, Visit, Translation, Advertising, Participation, Remote, Tickets diff --git a/settings/admin.py b/settings/admin.py index bda57fed..5c0c3f39 100644 --- a/settings/admin.py +++ b/settings/admin.py @@ -62,10 +62,10 @@ import datetime def main_page(request): now = datetime.datetime.now() - expositions = Exposition.objects.filter(main_page__gt=0) - conferences = Conference.objects.filter(main_page__gt=0) - seminars = Seminar.objects.filter(main_page__gt=0) - webinars = Webinar.objects.filter(main_page__gt=0) + expositions = Exposition.objects.filter(main_page=1) + conferences = Conference.objects.filter(main_page=1) + seminars = Seminar.objects.filter(main_page=1) + webinars = Webinar.objects.filter(main_page=1) events = {'expositions':expositions, 'conferences': conferences, 'seminars':seminars, 'webinars': webinars} @@ -83,9 +83,9 @@ def main_page(request): news_form.fields['main_page_news'].widget.attrs['data-init-text'] = json.dumps(a) article_form = MainPageArticle(initial={'article' : blogs}) - - - args = {'event_form' : MainPageEvent(initial=events), 'theme_form' : MainPageThemes(initial=themes), + event_data = {'expositions': ','.join(['%s:%s'%(item.id, item.name) for item in expositions])} + event_form = MainPageEvent(initial=event_data) + args = {'event_form' : event_form, 'theme_form' : MainPageThemes(initial=themes), 'article_form' : article_form, 'news_form' : news_form, 'photoreport_form' : MainPagePhotoreport(),} args.update(csrf(request)) diff --git a/settings/forms.py b/settings/forms.py index 26e0afae..e0aed057 100644 --- a/settings/forms.py +++ b/settings/forms.py @@ -77,6 +77,34 @@ from article.models import Article import datetime +class MainPageEvent(forms.Form): + expositions = forms.CharField(label=u'Выставки', widget=forms.HiddenInput(), required=False) + conferences = forms.CharField(label=u'Конференции', widget=forms.HiddenInput(), required=False) + + def save(self): + data = self.cleaned_data + expositions = data['expositions'] + conferences = data['conferences'] + Exposition.objects.filter(main_page=1).update(main_page=0) + Exposition.objects.filter(id__in=expositions).update(main_page=1) + #Conference.objects.filter(main_page=1).update(main_page=0) + #Conference.update(main_page=1) + + + def clean_expositions(self): + expositions = self.cleaned_data.get('expositions') + if expositions: + res = [] + for id in expositions.split(','): + try: + res.append(int(id)) + except: + continue + return res + else: + return [] + +""" class MainPageEvent(forms.Form): def __init__(self, *args, **kwargs): super(MainPageEvent, self).__init__(*args, **kwargs) @@ -112,26 +140,27 @@ class MainPageEvent(forms.Form): seminars.update(main_page=1) Webinar.objects.all().update(main_page=0) webinars.update(main_page=1) +""" class MainPageThemes(forms.Form): exposition_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.exposition), required=False) conference_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.conference), required=False) - seminar_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.seminar), - required=False) + #seminar_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.seminar), + # required=False) def save(self): data = self.cleaned_data exposition_themes = data['exposition_themes'] conference_themes = data['conference_themes'] - seminar_themes = data['seminar_themes'] + #seminar_themes = data['seminar_themes'] Theme.objects.filter(types=Theme.types.exposition).update(main_page=0) Theme.objects.filter(types=Theme.types.conference).update(main_page=0) - Theme.objects.filter(types=Theme.types.seminar).update(main_page=0) + #Theme.objects.filter(types=Theme.types.seminar).update(main_page=0) exposition_themes.update(main_page=1) conference_themes.update(main_page=1) - seminar_themes.update(main_page=1) + #seminar_themes.update(main_page=1) diff --git a/templates/admin/base.html b/templates/admin/base.html index 850ca929..743e7d89 100644 --- a/templates/admin/base.html +++ b/templates/admin/base.html @@ -103,6 +103,8 @@
  • Услуги
  • Настройки
  • Главная страница
  • +
  • Мета
  • +
  • Импорт тематик
  • Импорт тегов
  • @@ -175,4 +177,6 @@ +{% block bot_scripts %} +{% endblock %} \ No newline at end of file diff --git a/templates/admin/settings/main_page.html b/templates/admin/settings/main_page.html index 453cd5aa..5018c3f7 100644 --- a/templates/admin/settings/main_page.html +++ b/templates/admin/settings/main_page.html @@ -16,11 +16,13 @@
    {% csrf_token %} {{ event_form.expositions.label }}:    {{event_form.expositions }}     + {% comment %} {{ event_form.conferences.label }}:     {{event_form.conferences }}

    {{ event_form.seminars.label }}:         {{event_form.seminars }}     {{ event_form.webinars.label }}:           {{event_form.webinars }} + {% endcomment %}
    @@ -84,4 +86,51 @@
    +{% endblock %} + +{% block bot_scripts %} + {% endblock %} \ No newline at end of file diff --git a/templates/client/article/news.html b/templates/client/article/news.html index 8b8eb7c5..3ab166c5 100644 --- a/templates/client/article/news.html +++ b/templates/client/article/news.html @@ -35,7 +35,6 @@
    -
    @@ -45,7 +44,7 @@ {% include 'includes/show_logo.html' with obj=news %}

    {{ news.main_title }}

    {{ news.preview }}

    - {{ news.created|date:"d E Y" }}{% if news.get_event %}{{ news.get_event.name }}<{% endif %}/strong> + {{ news.publish_date|date:"d E Y" }}{% if news.get_event %}{{ news.get_event.name }}<{% endif %}
    {% endfor %} diff --git a/templates/client/article/news_list.html b/templates/client/article/news_list.html index 8679e5f9..00697608 100644 --- a/templates/client/article/news_list.html +++ b/templates/client/article/news_list.html @@ -44,7 +44,7 @@ {% include 'includes/article/news_preview.html' with obj=news %}

    {{ news.main_title }}

    {{ news.preview }} - {{ news.created|date:"d E Y" }}{% with event=news.get_event %}{% if event %}{{ event.name }}{% endif %}{% endwith %} + {{ news.publish_date|date:"d E Y" }}{% with event=news.get_event %}{% if event %}{{ event.name }}{% endif %}{% endwith %}
    {% endfor %} diff --git a/templates/client/base_catalog.html b/templates/client/base_catalog.html index ff58e6cd..8219b921 100644 --- a/templates/client/base_catalog.html +++ b/templates/client/base_catalog.html @@ -44,7 +44,9 @@ {% endblock %} {% include 'client/includes/side_confs.html' %}
    - {% include 'client/includes/news.html' %} +
    + {% include 'client/includes/news.html' with news=news_list %} +
    {% block aside_vk %}
    diff --git a/templates/client/includes/article/news_on_main_logo.html b/templates/client/includes/article/news_on_main_logo.html index f1731671..51e2920d 100644 --- a/templates/client/includes/article/news_on_main_logo.html +++ b/templates/client/includes/article/news_on_main_logo.html @@ -2,7 +2,7 @@ {% load thumbnail %} {% if obj.logo %} - {% thumbnail obj.logo "80x80" as im %} + {% thumbnail obj.logo "80x80" format="PNG" as im %} {% endthumbnail %} {% else %} diff --git a/templates/client/includes/article/news_preview.html b/templates/client/includes/article/news_preview.html index 323f860a..5b85ff8f 100644 --- a/templates/client/includes/article/news_preview.html +++ b/templates/client/includes/article/news_preview.html @@ -2,7 +2,7 @@ {% load thumbnail %} {% if obj.logo %} - {% thumbnail obj.logo "70x70" as im %} + {% thumbnail obj.logo "70x70" format="PNG" as im %} {% endthumbnail %} {% else %} diff --git a/templates/client/includes/article_tags.html b/templates/client/includes/article_tags.html index b4c4650a..265109ef 100644 --- a/templates/client/includes/article_tags.html +++ b/templates/client/includes/article_tags.html @@ -1,4 +1,6 @@ - -{% for tag in obj.tag.all %} -{{ tag.name }}, -{% endfor %} \ No newline at end of file + +{% with tags=obj.tag.all %} + {% for tag in obj.tag.all %} + {{ tag.name }}{% if forloop.counter != tags|length %},{% endif %} + {% endfor %} +{% endwith %} \ No newline at end of file diff --git a/templates/client/includes/news.html b/templates/client/includes/news.html index 4a49ed04..6ce8c206 100644 --- a/templates/client/includes/news.html +++ b/templates/client/includes/news.html @@ -1,42 +1,45 @@ -{% load static %} {% load i18n %} +{% load template_filters %} - \ No newline at end of file +{% else %} +
    + {% trans 'Статьи' %} +
    + + + +{% endif %} \ No newline at end of file