Refactor settings. Add Html model

remotes/origin/1203
Nazar Kotjuk 10 years ago
parent adff441775
commit 867cd3def8
  1. 2
      emencia/django/newsletter/models.py
  2. 6
      emencia/django/newsletter/views/admin_views.py
  3. 17
      expobanner/admin.py
  4. 1
      expobanner/admin_urls.py
  5. 6
      expobanner/management/commands/banner_log_update.py
  6. 1
      expobanner/views.py
  7. 6
      functions/forms.py
  8. 41
      functions/signal_additional_func.py
  9. 3
      functions/signal_handlers.py
  10. 11
      proj/views.py
  11. 36
      settings/admin.py
  12. 3
      settings/admin_urls.py
  13. 156
      settings/forms.py
  14. 92
      settings/models.py
  15. 26
      templates/admin/expobanner/main_page_block.html
  16. 1
      templates/admin/includes/admin_nav.html
  17. 8
      templates/client/includes/main_page_video_block.html
  18. 12
      templates/client/index.html
  19. 4
      templates/client/popups/announce_subscription.html
  20. 10
      templates/client/popups/announces.html

@ -558,7 +558,7 @@ from theme.models import Theme
class PopupCount(models.Model): class PopupCount(models.Model):
theme = models.ForeignKey(Theme) theme = models.ForeignKey(Theme, null=True)
date = models.DateField(auto_created=True) date = models.DateField(auto_created=True)
cnt = models.PositiveIntegerField(default=0) cnt = models.PositiveIntegerField(default=0)

@ -332,9 +332,9 @@ from ..models import PopupCount
from theme.models import Theme from theme.models import Theme
def count_popups(request): def count_popups(request):
if not request.is_ajax(): #if not request.is_ajax():
return HttpResponse("request is not ajax") # return HttpResponse("request is not ajax")
else: #else:
themes = request.GET.getlist('theme') themes = request.GET.getlist('theme')
if themes: if themes:
for theme_id in themes: for theme_id in themes:

@ -9,6 +9,8 @@ from expobanner.forms import UrlCreateForm, BannerCreateGroupForm, BannerCreateF
PaidCreateForm, PaidUpdateForm, TopCreateForm, BannerLinkCreateForm, MainCreateForm, MainConfCreateForm, MainUpdateForm, TopUpdateForm PaidCreateForm, PaidUpdateForm, TopCreateForm, BannerLinkCreateForm, MainCreateForm, MainConfCreateForm, MainUpdateForm, TopUpdateForm
from exposition.models import Exposition from exposition.models import Exposition
from conference.models import Conference from conference.models import Conference
from settings.models import Html
from settings.forms import HtmlForm
class BannersControl(TemplateView): class BannersControl(TemplateView):
template_name = 'admin/expobanner/banners_control.html' template_name = 'admin/expobanner/banners_control.html'
@ -344,9 +346,22 @@ class TopUpdate(UpdateView):
template_name = 'admin/expobanner/top_create.html' template_name = 'admin/expobanner/top_create.html'
success_url = '/admin/expobanners/top/list/' success_url = '/admin/expobanners/top/list/'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(TopUpdate, self).get_context_data(**kwargs) context = super(TopUpdate, self).get_context_data(**kwargs)
obj = self.object obj = self.object
context['exposition'] = obj.get_event() context['exposition'] = obj.get_event()
return context return context
class MainPageBlock(UpdateView):
model = Html
form_class = HtmlForm
template_name = 'admin/expobanner/main_page_block.html'
def get_context_data(self, **kwargs):
context = super(MainPageBlock, self).get_context_data(**kwargs)
context['languages'] = settings.LANGUAGES
return context
def get_success_url(self):
return '/admin/'

@ -42,4 +42,5 @@ urlpatterns = patterns('expobanner.admin',
url(r'^main/conf/$', MainConfCreate.as_view(), name='expobanner-conf-create_main'), url(r'^main/conf/$', MainConfCreate.as_view(), name='expobanner-conf-create_main'),
url(r'^main/conf/turn/(?P<pk>\d+)/(?P<status>.*)/$', main_turn, name='expobanner-conf-main-turn'), url(r'^main/conf/turn/(?P<pk>\d+)/(?P<status>.*)/$', main_turn, name='expobanner-conf-main-turn'),
#url(r'^main/conf/(?P<pk>\d+)/stat/$', MainStat.as_view(), name='expobanner_stat_main'), #url(r'^main/conf/(?P<pk>\d+)/stat/$', MainStat.as_view(), name='expobanner_stat_main'),
url(r'^main/block/(?P<pk>\d+)/$', MainPageBlock.as_view()),
) )

@ -1,12 +1,14 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from datetime import date from datetime import date
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from expobanner.models import Log, LogStat, Banner, PaidStat
from exposition.models import Exposition
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
from exposition.models import Exposition
from expobanner.models import Log, LogStat, Banner, PaidStat
today = date.today() today = date.today()
# banners # banners
for banner in Banner.objects.select_related('group').filter(public=True): for banner in Banner.objects.select_related('group').filter(public=True):

@ -87,6 +87,7 @@ def get_banners(request):
return response return response
def get_top(request): def get_top(request):
params = {'theme': request.GET.getlist('theme', []), params = {'theme': request.GET.getlist('theme', []),
'tag': request.GET.get('tag'), 'tag': request.GET.get('tag'),

@ -69,7 +69,7 @@ from django.conf import settings
from django.utils.translation import get_language from django.utils.translation import get_language
from django.forms.models import save_instance from django.forms.models import save_instance
class TranslatableModelForm(forms.ModelForm): class ExpoTranslatableModelForm(forms.ModelForm):
translatable_fields = [] translatable_fields = []
@ -88,7 +88,7 @@ class TranslatableModelForm(forms.ModelForm):
else: else:
kwargs.update({'initial': init_tr_data}) kwargs.update({'initial': init_tr_data})
super(TranslatableModelForm, self).__init__(*args, **kwargs) super(ExpoTranslatableModelForm, self).__init__(*args, **kwargs)
if not self.translatable_fields: if not self.translatable_fields:
self.translatable_fields = self._all_tr_field_names self.translatable_fields = self._all_tr_field_names
@ -113,7 +113,7 @@ class TranslatableModelForm(forms.ModelForm):
# todo: fix commit False error # todo: fix commit False error
init_lang = get_language()[:2] init_lang = get_language()[:2]
is_new = not self.instance.pk is_new = not self.instance.pk
inst = super(TranslatableModelForm, self).save() inst = super(ExpoTranslatableModelForm, self).save()
if is_new: if is_new:
for lang in self.data_by_lang: for lang in self.data_by_lang:

@ -1,10 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from settings.models import settings_dict, Setting
from django.conf import settings from django.conf import settings
from functions.translate import get_translated_fields from functions.translate import get_translated_fields
def fill_missing_languages(obj): def fill_missing_languages(obj):
""" """
looking for missing languages looking for missing languages
@ -30,39 +28,4 @@ def fill_missing_languages(obj):
for field in fields: for field in fields:
setattr(obj, field, getattr(translation, field)) setattr(obj, field, getattr(translation, field))
obj.save() obj.save()
def fill_meta_information(obj):
"""
looking for available settings for this object
and fill empty field with settings rules
"""
# return list of settings for this object
s_list = settings_dict.get(obj.__class__.__name__)
if s_list:
for s in s_list:
# get Setting model object
setting = Setting.objects.get(key=s.get('key'))
field = s.get('field_name')
if setting.type != 'transl':
# simple field
if getattr(obj, field)=="":
setattr(obj, field, setting.get_value())
obj.save()
else:
# translated field
for code, lang in settings.LANGUAGES:
# get translation object
tr = obj._meta.translations_model.objects.get(language_code=code, master__id=getattr(obj, 'id'))
if getattr(tr, field)=="":
value = setting.get_value(code)
try:
value = value%tr.__dict__
except KeyError:
pass
# ! charfield -> textfield
setattr(tr, field, value[:250])
tr.save()

@ -1,7 +1,7 @@
import random import random
import string import string
from django.db.models.fields.files import FieldFile from django.db.models.fields.files import FieldFile
from signal_additional_func import fill_missing_languages, fill_meta_information from signal_additional_func import fill_missing_languages
from functions.form_check import translit_with_separator from functions.form_check import translit_with_separator
@ -34,7 +34,6 @@ def post_save_handler(sender, **kwargs):
""" """
obj = kwargs['instance'] obj = kwargs['instance']
fill_missing_languages(obj) fill_missing_languages(obj)
fill_meta_information(obj)
def file_cleanup(sender, instance, *args, **kwargs): def file_cleanup(sender, instance, *args, **kwargs):

@ -16,6 +16,8 @@ from conference.models import Conference
from emencia.django.newsletter.forms import SubscribeAssideForm from emencia.django.newsletter.forms import SubscribeAssideForm
from django.db.models.loading import get_model
def clear_slashes(str_): def clear_slashes(str_):
if str_[0] == r'/': if str_[0] == r'/':
str_ = str_[1:] str_ = str_[1:]
@ -73,6 +75,12 @@ class MainPageView(JitterCacheMixin, TemplateView):
conf = Conference.objects.conf_main() conf = Conference.objects.conf_main()
ev = ex + conf ev = ex + conf
events = sorted(ev, key=lambda x: x.main.position) events = sorted(ev, key=lambda x: x.main.position)
Html = get_model('settings', 'Html')
try:
main_page_block = Html.objects.language().get(id=22)
except Html.DoesNotExist:
main_page_block = None
# update main_page counter # update main_page counter
for event in events: for event in events:
event.main.link.log(self.request, 1) event.main.link.log(self.request, 1)
@ -80,7 +88,8 @@ class MainPageView(JitterCacheMixin, TemplateView):
conference_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.conference)[:6] conference_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.conference)[:6]
args = {'events': events, 'exposition_themes': exposition_themes, 'conference_themes': conference_themes, args = {'events': events, 'exposition_themes': exposition_themes, 'conference_themes': conference_themes,
'search_form': ExpositionSearchForm, 'search_action': '/expo/search/'} 'search_form': ExpositionSearchForm, 'search_action': '/expo/search/',
'main_page_block': main_page_block}
context.update(args) context.update(args)

@ -1,27 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json import json
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect
from django.core.context_processors import csrf from django.core.context_processors import csrf
from django.conf import settings from forms import MainPageArticle, MainPageNews, MainPageThemes
from django.contrib.auth.decorators import login_required
#
from forms import SettingsForm
@login_required
def change_settings(request):
if request.POST:
pass
else:
form = SettingsForm()
args = {'form': form, 'languages': settings.LANGUAGES}
args.update(csrf(request))
return render_to_response('settings.html', args)
from forms import MainPageEvent, MainPagePhotoreport, MainPageArticle, MainPageNews, MainPageThemes
def handle_form(request, Form): def handle_form(request, Form):
@ -36,21 +18,18 @@ def handle_form(request, Form):
return HttpResponseRedirect('/admin/settings/main-page/') return HttpResponseRedirect('/admin/settings/main-page/')
def handle_events(request):
return handle_form(request, MainPageEvent)
def handle_news(request): def handle_news(request):
return handle_form(request, MainPageNews) return handle_form(request, MainPageNews)
def handle_articles(request): def handle_articles(request):
return handle_form(request, MainPageArticle) return handle_form(request, MainPageArticle)
def handle_themes(request): def handle_themes(request):
return handle_form(request, MainPageThemes) return handle_form(request, MainPageThemes)
def handle_photoreports(request):
return handle_form(request, MainPagePhotoreport)
from exposition.models import Exposition from exposition.models import Exposition
from conference.models import Conference from conference.models import Conference
@ -60,6 +39,7 @@ from theme.models import Theme
from article.models import Article from article.models import Article
import datetime import datetime
def main_page(request): def main_page(request):
now = datetime.datetime.now() now = datetime.datetime.now()
expositions = Exposition.objects.filter(main_page=1) expositions = Exposition.objects.filter(main_page=1)
@ -83,10 +63,8 @@ def main_page(request):
news_form.fields['main_page_news'].widget.attrs['data-init-text'] = json.dumps(a) news_form.fields['main_page_news'].widget.attrs['data-init-text'] = json.dumps(a)
article_form = MainPageArticle(initial={'article' : blogs}) article_form = MainPageArticle(initial={'article' : blogs})
event_data = {'expositions': ','.join(['%s:%s'%(item.id, item.name) for item in expositions])} args = { 'theme_form' : MainPageThemes(initial=themes),
event_form = MainPageEvent(initial=event_data)
args = {'event_form' : event_form, 'theme_form' : MainPageThemes(initial=themes),
'article_form' : article_form, 'article_form' : article_form,
'news_form' : news_form, 'photoreport_form' : MainPagePhotoreport(),} 'news_form' : news_form}
args.update(csrf(request)) args.update(csrf(request))
return render_to_response('admin/settings/main_page.html', args) return render_to_response('admin/settings/main_page.html', args)

@ -3,10 +3,7 @@ from django.conf.urls import patterns, include, url
urlpatterns = patterns('settings.admin', urlpatterns = patterns('settings.admin',
url(r'^main-page/$', 'main_page'), url(r'^main-page/$', 'main_page'),
url(r'^main-page/events/$', 'handle_events'),
url(r'^main-page/photoreports/$', 'handle_photoreports'),
url(r'^main-page/themes/$', 'handle_themes'), url(r'^main-page/themes/$', 'handle_themes'),
url(r'^main-page/news/$', 'handle_news'), url(r'^main-page/news/$', 'handle_news'),
url(r'^main-page/blogs/$', 'handle_articles'), url(r'^main-page/blogs/$', 'handle_articles'),
url(r'^$', 'change_settings'),
) )

@ -1,146 +1,19 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django import forms from django import forms
from models import Setting, settings_dict from ckeditor.widgets import CKEditorWidget
from django.conf import settings
from functions.translate import fill_trans_fields, populate, ZERO_LANGUAGE, populate_all, fill_trans_fields_all
class SettingsForm(forms.Form):
"""
Create Settings form for creating settings
__init__ uses for dynamic creates fields
save function saves data in Settings object. If it doesnt exist create new object
"""
def __init__(self, *args, **kwargs):
super(SettingsForm, self).__init__(*args, **kwargs)
# creates translated form fields, example: name_ru, name_en
# len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs
for model_name in settings_dict.values():
for setting in model_name:
item = Setting.objects.get(key=setting['key'])
if setting['type'] != 'transl':
self.fields[setting['key']] = forms.CharField(label=setting['verbose_name'], initial=item.get_value(),
required=False)
else:
if len(settings.LANGUAGES) in range(10):
for lid, (code, name) in enumerate(settings.LANGUAGES):
# using enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['%s_%s' %(setting['key'], code)] = forms.CharField(label=setting['verbose_name'],
initial=item.get_value(code),
required=required,
widget=forms.TextInput(
attrs={'style':'width: 450px'}))
"""
settings_list = Setting.objects.all()
for item in settings_list:
if item.type != 'transl':
self.fields['%s'%item.key] = forms.CharField(label='%s'%item.key, initial=item.get_value(),
required=False)
else:
if len(settings.LANGUAGES) in range(10):
for lid, (code, name) in enumerate(settings.LANGUAGES):
# using enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['%s_%s' %(item.key, code)] = forms.CharField(label=getattr(item, 'key'),
initial=item.get_value(code),
required=required,
widget=forms.TextInput(
attrs={'style':'width: 450px'}))
"""
def save(self):
"""
changes Settings model
"""
data = self.cleaned_data
capacity_tmpl = Setting.objects.get(key='hall_template')
for code, name in settings.LANGUAGES:
capacity_tmpl.set_value(data['hall_capacity_tmpl_%s'%code], code)
from exposition.models import Exposition
from conference.models import Conference
from seminar.models import Seminar
from webinar.models import Webinar
from photoreport.models import Photoreport
from news.models import News
from theme.models import Theme from theme.models import Theme
from .models import Html
from article.models import Article from article.models import Article
from functions.forms import ExpoTranslatableModelForm
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)
class HtmlForm(ExpoTranslatableModelForm):
class Meta:
model = Html
widgets = {
'text': CKEditorWidget,
}
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)
now = datetime.datetime.now
self.fields['expositions' ] = forms.ModelMultipleChoiceField(
queryset=Exposition.objects.all(),
required=False
)
self.fields['conferences' ] = forms.ModelMultipleChoiceField(
queryset=Conference.objects.all(),
required=False
)
self.fields['seminars' ] = forms.ModelMultipleChoiceField(
queryset=Seminar.objects.all(),
required=False
)
self.fields['webinars' ] = forms.ModelMultipleChoiceField(
queryset=Webinar.objects.all(),
required=False
)
def save(self):
data = self.cleaned_data
expositions = data['expositions']
conferences = data['conferences']
seminars = data['seminars']
webinars = data['webinars']
Exposition.objects.all().update(main_page=0)
expositions.update(main_page=1)
Conference.objects.all().update(main_page=0)
conferences.update(main_page=1)
Seminar.objects.all().update(main_page=0)
seminars.update(main_page=1)
Webinar.objects.all().update(main_page=0)
webinars.update(main_page=1)
"""
class MainPageThemes(forms.Form): class MainPageThemes(forms.Form):
exposition_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.exposition), exposition_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.exposition),
@ -163,17 +36,6 @@ class MainPageThemes(forms.Form):
#seminar_themes.update(main_page=1) #seminar_themes.update(main_page=1)
class MainPagePhotoreport(forms.Form):
photoreports = forms.ModelMultipleChoiceField(queryset=Photoreport.objects.all())
def save(self):
data = self.cleaned_data
photoreports = data['photoreports']
photoreports.update(main_page=1)
class MainPageNews(forms.Form): class MainPageNews(forms.Form):
main_page_news = forms.CharField(label=u'Новости', widget=forms.HiddenInput(), required=False,) main_page_news = forms.CharField(label=u'Новости', widget=forms.HiddenInput(), required=False,)

@ -4,95 +4,11 @@ from hvad.models import TranslatableModel, TranslatedFields
from functions.custom_fields import EnumField from functions.custom_fields import EnumField
class Setting(TranslatableModel): class Html(TranslatableModel):
""" name = models.CharField(max_length=100, blank=True)
Create Settings model, which stores different settings of project
Uses hvad.TranslatableModel which is child of django.db.models class
Setting create only by admin
"""
VALUES = ('int', 'text', 'transl', 'date')
key = models.CharField(max_length=50)
type = EnumField(values=VALUES)
int = models.IntegerField(blank=True, null=True)
text = models.CharField(max_length=255, blank=True)
date = models.DateTimeField(blank=True, null=True)
translations = TranslatedFields( translations = TranslatedFields(
transl = models.CharField(max_length=255, blank=True,default='111'), text=models.TextField()
name = models.CharField(max_length=50),
) )
def __unicode__(self): def __unicode__(self):
return self.key return self.name
def get_value(self, code=None):
"""
returns value of setting
value can be - int, text, date or translated field
"""
if self.type == 'transl':
obj = Setting._meta.translations_model.objects.get(language_code = code,master__id=getattr(self, 'id'))
return getattr(obj, self.type)
else:
return getattr(self,self.type)
def set_value(self, value, code=None):
"""
sets value of setting
"""
if self.type == 'transl':
obj = Setting._meta.translations_model.objects.get(language_code = code,master__id=getattr(self, 'id'))
setattr(obj, self.type, value)
obj.save()
else:
setattr(self, self.type, value)
# dictionaty of models settings
# every model have list of settings
# key: setting in db, field_name: field in model
settings_dict = dict(#City=[{'key': 'city_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'title Городов'},
# {'key': 'city_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'keywords'},
# {'key': 'city_descriptions', 'field_name': 'descriptions', 'type': 'transl', 'verbose_name': 'description'}],
#Exposition=[{'key': 'exposition_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'title Выставок'},
# {'key': 'exposition_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'keywords Выставок'}],
# Country=[{'key': 'country_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'title'},
# {'key': 'country_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'keywords'},
# {'key': 'country_descriptions', 'field_name': 'descriptions', 'type': 'transl', 'verbose_name': 'description'}]
# Exposition=[{'key': 'exposition_title', 'field_name': 'title', 'type': 'transl', 'verbose_name': 'Exposition title'},
# {'key': 'exposition_keywords', 'field_name': 'keywords', 'type': 'transl', 'verbose_name': 'Exposition keywords'},
# {'key': 'exposition_descriptions', 'field_name': 'descriptions', 'type': 'transl', 'verbose_name': 'Exposition description'}]
)
#from settings.models import settings, Setting
#country_set = settings.get('country')
#for s in country_set:
# set = Setting(key=s['key'], type=s['type'])
# set.save()
from django.db.models.signals import post_save
from django.dispatch import receiver
#@receiver(post_save, sender=Setting)
def create_transl_fields(sender, **kw):
"""
"""
setting = kw['instance']
setting.text = '111'
setting.save()
#if kwargs['created'] and setting.type == 'transl':
# setting.int = 1
#if len(setting.LANGUAGES) in range(10):
# for lid, (code, name) in enumerate(settings.LANGUAGES):
# using enumerate for detect iteration number
# first iteration is a default lang so it required fields
#post_save.connect(create_transl_fields, sender=Setting)

@ -0,0 +1,26 @@
{% extends 'admin/base.html' %}
{% load static %}
{% load i18n %}
{% block body %}
<form method="post" class="form-horizontal" name="form2" id="form2" enctype="multipart/form-data"> {% csrf_token %}
<fieldset>
<div class="box span8">
<div class="box-header well">
<h2><i class="icon-pencil"></i> Блок на главной</h2>
</div>
<div class="box-content">
{% include 'admin/forms/multilang.html' with field='text' form=form languages=languages %}
</div>
</div>
</fieldset>
<div class="controls">
<input class="btn btn-large btn-primary" type="submit" value="Готово">
<input class="btn btn-large" type="reset" value="Отмена">
</div>
</form>
{% endblock %}

@ -105,6 +105,7 @@
<li><a href="/admin/expobanners/top/list/">Выставки в топе</a></li> <li><a href="/admin/expobanners/top/list/">Выставки в топе</a></li>
<li><a href="/admin/expobanners/main/list/">Выставки на главной</a></li> <li><a href="/admin/expobanners/main/list/">Выставки на главной</a></li>
<li><a href="/admin/expobanners/main/conf/list/">Конференции на главной</a></li> <li><a href="/admin/expobanners/main/conf/list/">Конференции на главной</a></li>
<li><a href="/admin/expobanners/main/block/22/">Блок на главной</a></li>
</ul> </ul>
</li> </li>

@ -0,0 +1,8 @@
{% load i18n %}
<header class="clearfix">
<div class="pg-title"><a target="_blank" href="https://www.youtube.com/channel/UCE2QX9Q8YalEXHwaJoQf0MQ">{% trans ' Видеорепортажи' %}</a></div>
</header>
<div id="mp-photo-gallery" class="photo-gallery swiper-container">
<iframe width="100%" height="363" src="https://www.youtube.com/embed/4DUrpYvh3V4" frameborder="0" allowfullscreen></iframe>
</div>

@ -72,15 +72,9 @@
<div class="mcl"> <div class="mcl">
<div class="mp-photo-gallery"> <div class="mp-photo-gallery">
{% if main_page_block %}
{{ main_page_block.text|safe }}
<header class="clearfix"> {% endif %}
<div class="pg-title"><a target="_blank" href="https://www.youtube.com/channel/UCE2QX9Q8YalEXHwaJoQf0MQ">{% trans ' Видеорепортажи' %}</a></div>
</header>
<div id="mp-photo-gallery" class="photo-gallery swiper-container">
<iframe width="100%" height="363" src="https://www.youtube.com/embed/4DUrpYvh3V4" frameborder="0" allowfullscreen></iframe>
</div>
{% comment %} {% comment %}
<div id="mp-photo-gallery" class="photo-gallery swiper-container"> <div id="mp-photo-gallery" class="photo-gallery swiper-container">
<ul class="swiper-wrapper"> <ul class="swiper-wrapper">

@ -1,8 +1,8 @@
{% load static %} {% load static %}
{% load i18n %} {% load i18n %}
{% load template_filters %} {% load template_filters %}
{% if not request.COOKIES.subscribe_popup %}#} {% if not request.COOKIES.subscribe_popup %}
{% if not user.contact_set.exists %}#} {% if not user.contact_set.exists %}
<div id="pw-subscribe-popup" class="popup-window subscribe-modal"> <div id="pw-subscribe-popup" class="popup-window subscribe-modal">
<header class="clearfix"> <header class="clearfix">
<div class="step1"> <div class="step1">

@ -1,8 +1,10 @@
{% load i18n %}
<div id="pw-subscribe" class="popup-window pw-subscribe"> <div id="pw-subscribe" class="popup-window pw-subscribe">
<header class="clearfix"> <header class="clearfix">
<div class="pw-title">Получать анонсы </div> <div class="pw-title">{% trans 'Получать анонсы' %} </div>
<ul class="tabs"> <ul class="tabs">
<li class="active"><a class="icon-big-email" href="#">по e-mail</a></li> <li class="active"><a class="icon-big-email" href="#">{% trans 'по e-mail' %}</a></li>
</ul> </ul>
</header> </header>
<div class="pw-body clearfix"> <div class="pw-body clearfix">
@ -12,7 +14,7 @@
<div class="pwf-line mail"> <div class="pwf-line mail">
<div class="pwf-field">{{ announce_subscribe.email }}</div> <div class="pwf-field">{{ announce_subscribe.email }}</div>
<div class="pwf-msg"><a target="_blank" href="/newsletters/test-letter/">Пример рассылки</a></div> <div class="pwf-msg"><a target="_blank" href="/newsletters/test-letter/">{% trans 'Пример рассылки' %}</a></div>
</div> </div>
<div class="pwf-line country"> <div class="pwf-line country">
@ -44,7 +46,7 @@
</div> </div>
<div class="pwf-buttons-line"> <div class="pwf-buttons-line">
<button type="submit" class="icon-check">подписаться</button> <button type="submit" class="icon-check">{% trans 'подписаться' %}</button>
</div> </div>

Loading…
Cancel
Save