need to master

remotes/origin/1203
Назар Котюк 11 years ago
parent fd1e88573a
commit eba72f8f82
  1. 1
      accounts/management/__init__.py
  2. 1
      accounts/management/commands/__init__.py
  3. 82
      accounts/management/commands/load_accounts.py
  4. 8
      accounts/models.py
  5. 0
      banners/__init__.py
  6. 10
      banners/models.py
  7. 16
      banners/tests.py
  8. 7
      banners/urls.py
  9. 10
      banners/views.py
  10. 15
      conference/views.py
  11. 2
      exposition/models.py
  12. 8
      exposition/views.py
  13. 27
      place_exposition/views.py
  14. 2
      proj/settings.py
  15. 119
      proj/sitemaps.py
  16. 17
      proj/urls.py
  17. 4
      proj/views.py
  18. 14
      service/models.py
  19. 12
      service/order_forms.py
  20. 7
      templates/client/article/article.html
  21. 7
      templates/client/base_catalog.html
  22. 2
      templates/client/includes/exposition/exposition_list.html
  23. 2
      templates/client/includes/place/place_list.html
  24. 3
      templates/client/includes/place/place_object.html
  25. 7
      templates/client/includes/show_date_block.html
  26. 2
      templates/client/index.html
  27. 264
      templates/client/main_page.html
  28. 2
      templates/client/place/photo.html
  29. 2
      templates/client/place/place_list.html
  30. 18
      templates/client/robot.txt
  31. 2
      templates/client/service/build_stand.html
  32. 2
      templates/client/service/catalog.html
  33. 2
      templates/client/service/participation.html
  34. 2
      templates/client/service/remotely.html
  35. 2
      templates/client/service/thank_u_page.html
  36. 5
      templates/client/service/tickets.html
  37. 2
      templates/client/service/tour.html
  38. 6
      templates/client/service/translator.html
  39. 32
      theme/manager.py

@ -0,0 +1 @@
__author__ = 'root'

@ -0,0 +1,82 @@
import os
import MySQLdb
from MySQLdb.cursors import DictCursor
from django.core.management.base import BaseCommand
from accounts.models import User
def create_new_user(data):
email = data['email']
firstname = data['firstname']
lastname = data['lastname']
position = data['position']
web_page = data['web_page']
fb = data['fb']
li = data['li']
sk = data['sk']
about = data['about']
password = data['password']
url = data['url']
if not url:
url = str(data['id'])
user = User(username=email, first_name=firstname, last_name=lastname, email=email,
is_staff=False, is_active=True, is_superuser=False, password=password, position=position, url=url)
try:
user.save()
except:
return
profile = user.profile
profile.web_page = web_page
profile.facebook = fb
profile.linkedin = li
profile.skype = sk
profile.about = about
try:
profile.save()
except:
pass
return
class Command(BaseCommand):
def handle(self, *args, **options):
db = MySQLdb.connect(host="localhost",
user="expomap",
passwd="7FbLtAGjse",
db="old_db",
charset='utf8',
cursorclass=DictCursor)
cursor = db.cursor()
sql = """
SELECT customers_id as id, customers_email_address as email, customers_password as password, customers_firstname as firstname ,
customers_lastname as lastname , customers_telephone as phone, customers_job as `position`, customers_web as web_page,
customers_facebook as fb, customers_linkedin as li, customers_skype as sk, customers_about as about,
url
FROM `customers`
where customers_email_address!=''
"""
cursor.execute(sql)
result = cursor.fetchall()
#user.password = result[0]['customers_password']
for res in result:
email = res['email']
print(email)
try:
user = User.objects.get(username=email)
except User.DoesNotExist:
user = None
create_new_user(res)
if user:
password = res['password']
user.password = password
user.save()

@ -259,10 +259,10 @@ class Profile(models.Model):
about = models.TextField(verbose_name='О себе', blank=True)
avatar = models.ImageField(verbose_name='Фото', upload_to='accounts/avatar/', blank=True)
skype = models.CharField(blank=True, max_length=255)
facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True)
vk = models.URLField(verbose_name=_(u'В контакте'), blank=True)
facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True, max_length=255)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True,max_length=255)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True, max_length=255)
vk = models.URLField(verbose_name=_(u'В контакте'), blank=True, max_length=255)
# meta
title = models.CharField(max_length=255, blank=True)

@ -0,0 +1,10 @@
from django.db import models
# Create your models here.
class Redirect(models.Model):
redirect = models.URLField()
count = models.PositiveIntegerField(default=0)
def __unicode__(self):
return self.redirect

@ -0,0 +1,16 @@
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)

@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'redirect/(?P<id>.*)/$', 'banners.views.redirect'),
)

@ -0,0 +1,10 @@
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
from banners.models import Redirect
from django.db.models import F
def redirect(request, id):
redirect = get_object_or_404(Redirect, id=id)
Redirect.objects.filter(id=id).update(count=F('count')+1)
return HttpResponseRedirect(redirect.redirect)

@ -24,7 +24,8 @@ from functions.cache_mixin import JitterCacheMixin, CacheMixin
MONTHES = settings.MONTHES
class ConferenceBy(MetadataMixin, ListView):
class ConferenceBy(JitterCacheMixin, MetadataMixin, ListView):
cache_range = settings.CACHE_RANGE
template_name = 'conference/conference_by.html'
title1 = ''
title2 = ''
@ -40,7 +41,6 @@ class ConferenceBy(MetadataMixin, ListView):
class ConferenceByCountry(ConferenceBy):
cache_range = [60, 120]
model = Country
title1 = _(u'По странам')
title2 = _(u'Коференции мира по странам')
@ -55,7 +55,6 @@ class ConferenceByCountry(ConferenceBy):
class ConferenceByTheme(ConferenceBy):
cache_range = [60, 120]
model = Theme
title1 = _(u'По тематикам')
title2 = _(u'Коференции мира по тематикам')
@ -70,7 +69,6 @@ class ConferenceByTheme(ConferenceBy):
class ConferenceByCity(ConferenceBy):
cache_range = [60, 120]
model = City
title1 = _(u'По городам')
title2 = _(u'Коференции мира по городам')
@ -84,7 +82,8 @@ class ConferenceByCity(ConferenceBy):
# .order_by('translations__name').distinct()
class ConferenceCatalog(MetadataMixin, ListView):
class ConferenceCatalog(JitterCacheMixin, MetadataMixin, ListView):
cache_range = settings.CACHE_RANGE
model = Conference
paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/conference/catalog.html'
@ -276,6 +275,7 @@ class ConferenceServiceView(FormMixin, DetailView):
model = Conference
slug_field = 'url'
service = None
success_url = '/service/thanks/'
def post(self, request, *args, **kwargs):
self.object = self.get_object()
@ -310,7 +310,7 @@ class ConferenceServiceView(FormMixin, DetailView):
order.conference = self.object
order.save()
messages.success(self.request, _(u'Ваш запрос был успешно отправлен'))
return HttpResponseRedirect(self.request.path)
return HttpResponseRedirect(self.success_url)
def get_initial(self):
"""
@ -333,7 +333,8 @@ class ConferenceServiceView(FormMixin, DetailView):
class ConferenceDetail(MetadataMixin, DetailView):
class ConferenceDetail(JitterCacheMixin, DetailView):
cache_range = settings.CACHE_RANGE
model = Conference
slug_field = 'url'
template_name = 'client/conference/conference_detail.html'

@ -175,6 +175,8 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
def get_parent(self):
return {}
def get_absolute_url(self):
return self.get_permanent_url()
def get_index_text(self):
translation.activate('ru')

@ -28,7 +28,7 @@ from functions.cache_mixin import JitterCacheMixin, CacheMixin
class ExpositionBy(MetadataMixin, ListView):
class ExpositionBy(JitterCacheMixin, MetadataMixin, ListView):
template_name = 'exposition/exposition_by.html'
title1 = ''
title2 = ''
@ -135,7 +135,8 @@ def exposition_visit(request, id):
#------------------------------------------------------------------------------
class ExpoDetail(MetadataMixin, DetailView):
class ExpoDetail(JitterCacheMixin, MetadataMixin, DetailView):
cache_range = settings.CACHE_RANGE
model = Exposition
slug_field = 'url'
template_name = 'client/exposition/exposition_detail.html'
@ -168,6 +169,7 @@ class ExpositionServiceView(MetadataMixin, FormMixin, DetailView):
model = Exposition
slug_field = 'url'
service = None
success_url = '/service/thanks/'
def dispatch(self, request, *args, **kwargs):
service_url = self.kwargs.get('service_url')
@ -208,7 +210,7 @@ class ExpositionServiceView(MetadataMixin, FormMixin, DetailView):
order.exposition = self.object
order.save()
messages.success(self.request, _(u'Ваш запрос был успешно отправлен'))
return HttpResponseRedirect(self.request.path)
return HttpResponseRedirect(self.success_url)
def get_initial(self):
"""

@ -14,6 +14,8 @@ from country.models import Country
from city.models import City
from models import PlaceExposition
from meta.views import MetadataMixin
from django.conf import settings
from functions.cache_mixin import JitterCacheMixin, CacheMixin
def catalog(request):
@ -49,7 +51,8 @@ class PlaceSearchView(ExpoSearchView):
search_form = PlaceSearchForm
model = PlaceExposition
class PlaceDetail(MetadataMixin, DetailView):
class PlaceDetail(JitterCacheMixin, MetadataMixin, DetailView):
cache_range = settings.CACHE_RANGE
model = PlaceExposition
search_form = PlaceSearchForm
slug_field = 'url'
@ -99,7 +102,6 @@ class PlaceDetail(MetadataMixin, DetailView):
class PlacePhoto(ListView):
template_name = 'client/place/photo.html'
obj = None
search_form = PlaceSearchForm
def get_queryset(self):
slug = self.kwargs.get('slug')
@ -117,11 +119,10 @@ class PlacePhoto(ListView):
def get_context_data(self, **kwargs):
context = super(PlacePhoto, self).get_context_data(**kwargs)
context['object'] = self.obj
context['search_form'] = self.search_form
return context
class PlaceList(MetadataMixin, ListView):
class PlaceList(JitterCacheMixin, MetadataMixin, ListView):
model = PlaceExposition
paginate_by = 10
template_name = 'client/place/place_list.html'
@ -129,7 +130,8 @@ class PlaceList(MetadataMixin, ListView):
def get_queryset(self):
qs = super(PlaceList, self).get_queryset().order_by('-rating')
#qs = super(PlaceList, self).get_queryset().order_by('-rating')
qs= PlaceExposition.objects.language().select_related('country', 'city').all().order_by('-rating')
conf_qs = PlaceConference.objects.language().all()
return list(qs)+list(conf_qs)
@ -139,17 +141,16 @@ class PlaceList(MetadataMixin, ListView):
return context
class PlaceCatalog(MetadataMixin, ListView):
class PlaceCatalog(JitterCacheMixin, MetadataMixin, ListView):
cache_range = settings.CACHE_RANGE
model = PlaceExposition
paginate_by = 10
template_name = 'place/catalog.html'
search_form = PlaceSearchForm
template_name = 'client/place/catalog.html'
filter_object = None
def get_context_data(self, **kwargs):
context = super(PlaceCatalog, self).get_context_data(**kwargs)
context['search_form'] = self.search_form
context['filter_object'] = self.filter_object
context['catalog_url'] = self.catalog_url
@ -164,8 +165,8 @@ class PlaceCountryCatalog(PlaceCatalog):
country = get_object_or_404(Country, url=slug)
self.kwargs['country'] = country
self.filter_object = country
qs = self.model.objects.language().filter(country=country).order_by('-rating')
conf_qs = PlaceConference.objects.language().filter(country=country)
qs = self.model.objects.language().select_related('country', 'city').filter(country=country).order_by('-rating')
conf_qs = PlaceConference.objects.language().select_related('country', 'city').filter(country=country)
return list(qs) + list(conf_qs)
@ -178,6 +179,6 @@ class PlaceCityCatalog(PlaceCatalog):
city = get_object_or_404(City, url=slug)
self.kwargs['city'] = city
self.filter_object = city
qs = self.model.objects.language().filter(city=city).order_by('-rating')
conf_qs = PlaceConference.objects.language().filter(city=city)
qs = self.model.objects.language().select_related('country', 'city').filter(city=city).order_by('-rating')
conf_qs = PlaceConference.objects.language().select_related('country', 'city').filter(city=city)
return list(qs) + list(conf_qs)

@ -277,6 +277,7 @@ INSTALLED_APPS = (
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'django.contrib.sitemaps',
'haystack',
#custom modules
'accounts',
@ -304,6 +305,7 @@ INSTALLED_APPS = (
'translator',
'webinar',
'meta',
'banners',
#django modules
'sorl.thumbnail', # for logos
'photologue', # photogallery

@ -0,0 +1,119 @@
import datetime
from django.contrib.sitemaps import Sitemap
from exposition.models import Exposition
from conference.models import Conference
from city.models import City
from country.models import Country
from theme.models import Theme, Tag
from article.models import Article
from django.core.paginator import Paginator
class Abstract(Sitemap):
changefreq = 'weekly'
priority = 0.8
def lastmod(self, obj):
return datetime.date.today()
class ExpoCard(Abstract):
changefreq = 'weekly'
priority = 0.8
def items(self):
return Exposition.enable.upcoming()
def lastmod(self, obj):
return obj.modified
class ExpoCity(Abstract):
def items(self):
return City.used.expo_cities()
def location(self, obj):
return "/expo/city/%s/" % obj.url
class ExpoCountry(Abstract):
def items(self):
return Country.objects.expo_countries()
def location(self, obj):
return "/expo/country/%s/" % obj.url
class ExpoTheme(Abstract):
def items(self):
return Theme.active.expo_themes()
def location(self, obj):
return "/expo/theme/%s/" % obj.url
class ExpoTag(Abstract):
def items(self):
return Tag.active.expo_tag()
def location(self, obj):
return "/expo/tag/%s/" % obj.url
class ConfCard(Sitemap):
changefreq = 'weekly'
priority = 0.8
def items(self):
return Conference.enable.upcoming()
def lastmod(self, obj):
return obj.modified
def location(self, obj):
return "/conference/%s/" % obj.url
class ConfCity(Abstract):
def items(self):
return City.used.conference_cities()
def location(self, obj):
return "/conference/city/%s/" % obj.url
class ConfCountry(Abstract):
def items(self):
return Country.objects.conference_countries()
def location(self, obj):
return "/conference/country/%s/" % obj.url
class ConfTheme(Abstract):
def items(self):
return Theme.active.conference_themes_with_count()
def location(self, obj):
return "/conference/theme/%s/" % obj.url
class ConfTag(Abstract):
def items(self):
return Tag.active.conference_tags()
def location(self, obj):
return "/conference/tag/%s/" % obj.url
class NewsSiteMap(Abstract):
priority = 0.5
def items(self):
return Article.objects.news().filter(publish_date__isnull=False)
def location(self, obj):
return "/news/%s/" % obj.slug
class BlogsSiteMap(Abstract):
priority = 0.5
def items(self):
return Article.objects.blogs().filter(publish_date__isnull=False)
def location(self, obj):
return "/blogs/%s/" % obj.slug

@ -10,9 +10,23 @@ class Robot(TemplateView):
template_name = 'robot.txt'
content_type = 'text/plain'
from django.contrib.sitemaps import Sitemap
from exposition.models import Exposition
from sitemaps import ExpoCard, ExpoCity, ExpoCountry, ExpoTheme, ExpoTag, ConfCard, ConfCity, ConfCountry, ConfTheme,\
ConfTag, NewsSiteMap, BlogsSiteMap
sitemaps = {
'expo': ExpoCard(), 'news': NewsSiteMap(), 'blogs': BlogsSiteMap(),#'expo_city': ExpoCity(), 'expo_country': ExpoCountry(), 'expo_theme': ExpoTheme(), \
'conference': ConfCard(), 'expo_tag': ExpoTag(), 'conference_city': ConfCity(), 'conference_country': ConfCountry(),\
'conference_theme': ConfTheme(), 'conference_tag': ConfTag()
}
urlpatterns = patterns('',
#url(r'^__debug__/', include(debug_toolbar.urls)),
url(r'^admin/', include('proj.admin_urls')),
url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
url(r'^robot\.txt$', Robot.as_view()),
url(r'^$', MainPageView.as_view()),
url(r'^theme/', include('theme.urls')),
@ -43,8 +57,9 @@ urlpatterns = patterns('',
url(r'^accounts/', include('registration.backends.default.urls')),
url(r'^', include('password_reset.urls')),
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^redirect/', include('banners.urls')),
#url(r'^social/', include('social_auth.urls')),
#url(r'^', include('settings.old_urls')),
url(r'^', include('settings.old_urls')),
#url(r'^search/', include('haystack.urls')),
url(r'^', include('service.urls')),
)

@ -8,6 +8,7 @@ from exposition.models import Exposition
from theme.models import Theme
from news.models import News
from article.models import Article
from functions.cache_mixin import JitterCacheMixin, CacheMixin
from functions.forms import ThemeSearch, PlaceSearch
@ -29,7 +30,8 @@ def expo_context(request):
return cont
class MainPageView(TemplateView):
class MainPageView(JitterCacheMixin,TemplateView):
cache_range = settings.CACHE_RANGE
template_name = 'index.html'
def get_context_data(self, **kwargs):

@ -88,7 +88,7 @@ class Tickets(AbstractOrder):
class Remote(AbstractOrder):
interested_participants = models.TextField(blank=True)
additional = models.CharField(max_length=255)
additional = models.CharField(max_length=255, blank=True)
class Participation(AbstractOrder):
@ -97,12 +97,12 @@ class Participation(AbstractOrder):
company_inf = models.TextField()
class Translation(AbstractOrder):
days = models.IntegerField()
hours = models.IntegerField()
fr = models.DateField()
to = models.DateField()
languages = models.TextField()
themes = models.TextField()
days = models.IntegerField(null=True,blank=True)
hours = models.IntegerField(null=True, blank=True)
fr = models.DateField(blank=True)
to = models.DateField(blank=True)
languages = models.TextField(blank=True)
themes = models.TextField(blank=True)
class Visit(AbstractOrder):
fr = models.DateField()

@ -105,7 +105,7 @@ ADDITIONAL_REMOTE_CHOICES = [(_(u'официальный каталог'), _(u'
]
class RemoteForm(AbstractOrderForm):
additional = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=ADDITIONAL_REMOTE_CHOICES)
additional = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=ADDITIONAL_REMOTE_CHOICES, required=False)
class Meta:
model = Remote
@ -130,12 +130,10 @@ LANGS = [(_(u'Русский'), _(u'Русский'))]
from theme.models import Theme
class TranslationForm(AbstractOrderForm):
languages = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
choices=LANGS)
themes = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
choices=[(theme.id, theme.id) for theme in Theme.objects.language().filter()])
fr = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')}))
to = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateTo', 'placeholder': _(u'дд.мм.гггг')}))
languages = forms.CharField(required=False)
themes = forms.CharField(required=False)
fr = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')}), required=False)
to = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateTo', 'placeholder': _(u'дд.мм.гггг')}), required=False)
class Meta:
model = Translation

@ -46,12 +46,13 @@
</div>
</div>
{% with blogs=object.similars %}
{% if blogs %}
<div class="rq-to-hide">
<div class="s-comments">
<div class="sect-title blog_link">{% trans 'Похожие статьи' %}<a class="button more" href="/blogs/">{% trans 'Все статьи' %}</a></div>
<div class="cat-list sc-comments">
{% for blog in object.similars %}
{% for blog in blogs %}
<div class="cl-item">
<div class="acticle_list">
<a href="{{ blog.get_permanent_url }}" title="">{% include 'includes/show_logo.html' with obj=blog %}</a>
@ -64,4 +65,6 @@
</div>
</div>
</div>
{% endif %}
{% endwith %}
{% endblock %}

@ -22,11 +22,8 @@
{% if theme_for_filter.id == 27 or theme_for_filter.id == 9 or theme_for_filter.id == 48 %}
<div class="sbnr">
<div class="sbnr-wrap">
<a href="/expomap.ru/redirect.php/action/banner/goto/293">
<a href="/redirect/redirect/11/">
<img src="{% static 'client/img/partners/imgo.jpg' %}" alt="" />
</a>
</div>
</div>
@ -68,7 +65,7 @@
{% endwith %}
{% block under_search_baner %}
<div class="abn">
<a href="/expomap.ru/redirect.php/action/banner/goto/289"><img src="{% static 'client/img/partners/wire_760x70.gif' %}" alt="" /></a>
<a href="/redirect/redirect/10/"><img src="{% static 'client/img/partners/wire_760x70.gif' %}" alt="" /></a>
</div>
{% endblock %}

@ -90,6 +90,8 @@
</div>
</footer>
</li>
{% if forloop.counter == 8 %}
<!-- Яндекс.Директ -->
<script type="text/javascript">

@ -28,7 +28,7 @@
{% if object.total_area %}
<div class="cli-dim">{{ object.total_area }} м2</div>
{% endif %}
<div class="cli-place"><a href="{{ object.country.get_permanent_url }}">{{ object.country }}</a>, <a href="{{ object.city.get_permanent_url }}">{{ object.city }}</a>
<div class="cli-place"><a href="/places/country/{{ object.country.url }}/">{{ object.country }}</a>, <a href="/places/city/{{ object.city.url }}/">{{ object.city }}</a>
</div>
</div>
</div>

@ -197,7 +197,8 @@
<div class="ic-wrap">
<div class="ic-col">
<div class="ic-addr">{{ place.adress }}</div>
<div class="ic-links"><a target="_blank" href="{{ place.web_page }}">{{ place.web_page }}</a></div>
<div class="ic-links">
<a target="_blank" href="#" data-type="href" data-hash="1qwer" data-url="{{ place.web_page|base64_encode }}" class="link-encode">{{ place.web_page }}</a>
</div>
<div class="ic-col">
<ul class="tels">

@ -28,7 +28,12 @@
{{ obj.data_begin|date:"F j" }}
{% endifequal %}
{% else %}
{{ obj.data_begin|date:"j" }}{% endifnotequal %} {% trans 'по' %} {{ obj.data_end }}
{{ obj.data_begin|date:"j" }}{% endifnotequal %} {% trans 'по' %}
{% ifequal LANGUAGE_CODE 'ru' %}
{{ obj.data_end|ru_strftime:"%d %B" }}
{% else %}
{{ obj.data_end }}
{% endifequal %}
{% else %}
{{ obj.data_begin }}
{% endif %}

@ -58,7 +58,7 @@
<div class="abn">
{% block menu_banner %}
<a href="/expomap.ru/redirect.php/action/banner/goto/289"><img src="{% static 'client/img/partners/wire_760x70.gif' %}" alt="" /></a>
<a href="/redirect/redirect/10/"><img src="{% static 'client/img/partners/wire_760x70.gif' %}" alt="" /></a>
{% endblock %}
</div>
</div>

@ -1,264 +0,0 @@
{% extends "blank.html" %}
{% load static %}
{% load i18n %}
{% load thumbnail %}
{% block body_class %} class="main-page" {% endblock %}
{% block top %}
<section class="layout mp-top">
<div class="layout-wrap">
<aside>
{% include 'menu.html' %}
</aside>
<div class="mcl">
<div id="mp-recent-expo" class="recent-expo swiper-container">
<ul class="swiper-wrapper">
{% for event in events %}
<li class="swiper-slide">
<div class="re-pict">
{% if event.logo %}
<a href="{{ event.get_permanent_url }}">
<img src="{{ event.logo.url }}">
{% comment %}
{% thumbnail event.logo "220x220" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
{% endcomment %}
</a>
{% endif %}
</div>
<div class="re-body">
<div class="re-info">
<a href="{{ event.get_permanent_url }}">
<div class="re-title">{{ event.name|safe }}</div>
<div class="re-date">
{% with obj=event %}
{% include 'client/includes/show_date_block.html' %}
{% endwith %}
</div>
<div class="re-descr" title="{{ event.main_title|safe }}">{{ event.main_title|safe }}</div>
</a>
</div>
<footer>
<div class="re-buttons">
<a class="button blue icon-calendar addcalendar" href="{{ event.get_calendar_url }}">{% trans 'добавить в календарь' %}</a>
<a class="button green icon-note" href="#">{% trans 'заметка' %}</a>
</div>
<div class="re-tags">
{% for tag in event.tag.all %}
<a href="{{ event.get_catalog_url }}tag-{{ tag.url }}">{{ tag }}</a>,
{% endfor %}
</div>
</footer>
</div>
</li>
{% endfor %}
</ul>
<div class="re-controls">
<a class="prev" href="#">&lt;</a>
<a class="next" href="#">&gt;</a>
</div>
</div>
</div>
</div>
</section>
{% endblock %}
{% block search %}
{% include 'includes/catalog_search_main.html' with search_form=search_form %}
{% endblock %}
{% block catalog %}
<section class="layout mp-catalog">
<div class="layout-wrap">
<aside>
{% include 'client/includes/feedback.html' %}
{% include 'client/includes/online_consult.html' %}
{% comment %}
<!-- task EXPO-145-->
{% include 'client/includes/announces.html' %}
{% endcomment %}
</aside>
<div class="mcl">
<div class="mp-catalog-lists">
<div class="mpc-list">
<header>{% trans 'Выставки' %}</header>
<ul>
{% for theme in exposition_themes %}
<li><a href="/expositions/theme-{{ theme.url }}"><span>{{ theme.name }}</span>&nbsp;<i>({{ theme.expositions_number }})</i></a></li>
{% endfor %}
</ul>
<footer><a class="more" href="/expositions/">{% trans 'Все выставки' %}</a></footer>
</div>
<div class="mpc-list">
<header>{% trans 'конференции' %}</header>
<ul>
{% for theme in conference_themes %}
<li><a href="/conferences/theme-{{ theme.url }}"><span>{{ theme.name }}</span>&nbsp;<i>({{ theme.conferences_number }})</i></a></li>
{% endfor %}
</ul>
<footer><a class="more" href="/conferences/">{% trans 'Все конференции' %}</a></footer>
</div>
{% comment %}
<div class="mpc-list">
<header>{% trans 'семинары' %}</header>
<ul>
{% for theme in seminar_themes %}
<li><a href="/seminars/theme-{{ theme.url }}"><span>{{ theme.name }}</span>&nbsp;<i>({{ theme.seminars_number }})</i></a></li>
{% endfor %}
</ul>
<footer><a class="more" href="/seminars/">{% trans 'Все семинары' %}</a></footer>
</div>
{% endcomment %}
</div>
<div class="abn">
{% block menu_banner %}
<a href="#">
<img src="{% static 'client/img/_del-temp/banner-2.gif' %}" alt="" />
</a>
{% endblock %}
</div>
</div>
</div>
</section>
{% endblock %}
{% block announces %}
<section class="layout mp-announces">
<div class="layout-wrap">
<aside>
<div class="mp-news-list">
<header>
<a href="#">{% trans 'Новости событий' %}</a>
</header>
<ul>
{% for news in news_list %}
<li>
<a href="{{ news.get_permanent_url }}">
<span class="nl-pict">
{# add logo #}
<img src="{% static 'client/img/_del-temp/expo-bn-2-s.jpg' %}" alt="" />
</span>
<span class="nl-body">
<span class="nl-text">{{ news.main_title %}</span>
<span class="nl-date">{{ news.date }}</span>
</span>
</a>
</li>
{% endfor %}
</ul>
<footer><a class="more" href="#">{% trans 'Все новости' %}</a></footer>
</div>
</aside>
<div class="mcl">
<div class="mp-photo-gallery">
<header class="clearfix">
<div class="pg-title"><a href="#">{% trans 'Фоторепортажи:' %}</a></div>
<h2><a href="#">Edinburgh International Festival 2013</a></h2>
</header>
<div id="mp-photo-gallery" class="photo-gallery swiper-container">
<ul class="swiper-wrapper">
<li class="swiper-slide">
<div class="pg-item">
<div class="pgi-pict"><img src="{% static 'client/img/_del-temp/mp-phg-1.jpg' %}" alt="" /></div>
<div class="pgi-descr clearfix">
<div class="pgi-date"><b>с 1 по 8 августа</b> 2013 года</div>
<div class="pgi-text">Международный фестиваль оперы, музыки, драматических и танцевальных постановок Edinburgh International Festival 2013</div>
</div>
</div>
</li>
<li class="swiper-slide">
<div class="pg-item">
<div class="pgi-pict"><img src="{% static 'client/img/_del-temp/mp-phg-1.jpg' %}" alt="" /></div>
<div class="pgi-descr clearfix">
<div class="pgi-date"><b>с 1 по 8 августа</b> 2013 года</div>
<div class="pgi-text">Международный фестиваль оперы, музыки, драматических и танцевальных постановок Edinburgh International Festival 2013</div>
</div>
</div>
</li>
</ul>
<div class="re-controls">
<a class="prev" href="#">&lt;</a>
<a class="next" href="#">&gt;</a>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}
{% block partners %}
<section class="layout mp-partners">
<div class="mpp-wrap">
<header>{% trans 'Наши партнеры:' %}</header>
<ul class="mp-partners-list">
<li><img src="{% static 'client/img/partners/deutsche-messe-2.png' %}" /></li>
<li><img src="{% static 'client/img/partners/ite.png' %}"/></li>
<li><img src="{% static 'client/img/partners/nurnberg-messe.png' %}"/></li>
<li><img src="{% static 'client/img/partners/reed-exhibitions.png' %}"/></li>
<li><img src="{% static 'client/img/partners/messe-dusseldorf.png' %}"/></li>
</ul>
</div>
</section>
{% endblock %}
{% block services %}
<section class="layout mp-services">
<div class="layout-wrap">
<aside>
{% include 'client/includes/services.html' %}
</aside>
<div class="mcl">
<div class="mp-reviews-wrap clearfix">
<div class="mp-reviews">
<header>
<div class="mpr-title"><a href="#">{% trans 'Обзоры и аналитика' %}</a></div>
<div class="more-link"><a class="more" href="/articles/">{% trans 'Все обзоры' %}</a></div>
</header>
<ul>
{% for article in articles %}
<li>
<a href="{{ article.get_permanent_url }}">
<span class="mpr-pict"><img src="{% static 'client/img/_del-temp/review-1.jpg' %}" alt="" /></span>
<span class="mpr-text">{{ article.main_title }}</span>
</a>
</li>
{% endfor %}
</ul>
</div>
<div class="sbnr">
<div class="sbnr-wrap"><a href="#"><img src="{% static 'client/img/_del-temp/bnrs.jpg' %}" alt="" /></a></div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

@ -4,7 +4,7 @@
{% block bread_scrumbs %}
<div class="bread-crumbs">
<a href="/">{% trans 'Главная страница' %}</a>
<a href="{{ object.catalog }}">{% trans 'Выставки' %}</a>
<a href="{{ object.catalog }}">{% trans 'Места' %}</a>
<a href="{{ object.catalog }}country/{{ object.country.url }}/">{{ object.country }}</a>
<a href="{{ object.catalog }}city/{{ object.city.url }}/">{{ object.city }}</a>
<a href="{{ object.get_permanent_url }}">{{ object.name }}</a>

@ -16,7 +16,7 @@
{% endblock %}
{% block content_list %}
{% include 'includes/place/place_list.html' with object_list=object_list %}
{% include 'client/includes/place/place_list.html' with object_list=object_list %}
{% endblock %}
{% block paginator %}

@ -14,9 +14,9 @@ Disallow: /members/search/
Disallow: /admin/
Disallow: /theme/
Disallow: /conference/search/
conference/add-note/
conference-add-calendar/
conference-visit/
Disallow: /conference/add-note/
Disallow: /conference-add-calendar/
Disallow: /conference-visit/
Disallow: /seminar/
Disallow: /webinar/
Disallow: /company/
@ -109,9 +109,9 @@ Disallow: /members/search/
Disallow: /admin/
Disallow: /theme/
Disallow: /conference/search/
conference/add-note/
conference-add-calendar/
conference-visit/
Disallow: /conference/add-note/
Disallow: /conference-add-calendar/
Disallow: /conference-visit/
Disallow: /seminar/
Disallow: /webinar/
Disallow: /company/
@ -204,9 +204,9 @@ Disallow: /members/search/
Disallow: /admin/
Disallow: /theme/
Disallow: /conference/search/
conference/add-note/
conference-add-calendar/
conference-visit/
Disallow: /conference/add-note/
Disallow: /conference-add-calendar/
Disallow: /conference-visit/
Disallow: /seminar/
Disallow: /webinar/
Disallow: /company/

@ -58,7 +58,7 @@
</div>
<div class="rq-form" {% if form.errors %}style="display:block"{% endif %}>
<form action="#" method="post">{% csrf_token %}
<form method="post">{% csrf_token %}
<hr />

@ -58,7 +58,7 @@
</div>
<div class="rq-form" {% if form.errors %}style="display:block"{% endif %}>
<form action="#" method="post">{% csrf_token %}
<form method="post">{% csrf_token %}
<hr />

@ -55,7 +55,7 @@
</div>
<div class="rq-form service-page" {% if form.errors %}style="display:block"{% endif %}>
<form action="#" method="post">{% csrf_token %}
<form method="post">{% csrf_token %}
<hr />

@ -58,7 +58,7 @@
</div>
<div class="rq-form service-page" {% if form.errors %}style="display:block"{% endif %}>
<form action="#" method="post">{% csrf_token %}
<form method="post">{% csrf_token %}
<hr />

@ -20,6 +20,7 @@
<p>Также Вы можете позвонить нам для ускорения процесса, если Ваш запрос является срочным.</p>
</article>
<div class="clearfix"></div>
{% comment %}
<h3>Что дальше Вы хотите делать?</h3>
<div class="help-block">
<div class="item">
@ -51,6 +52,7 @@
</div>
</div>
<div class="clearfix"></div>
{% endcomment %}
</div>
</div>
</div>

@ -51,7 +51,7 @@
</div>
<div class="rq-form service-page" {% if form.errors %}style="display:block"{% endif %}>
<form action="{{ request.path }}" method="post">{% csrf_token %}
<form method="post">{% csrf_token %}
<hr />
@ -274,7 +274,7 @@
{% endif %}
</ul>
</div>
{% comment %}
<div class="m-article">
<div class="h-booking">
<header class="clearfix">
@ -331,6 +331,7 @@
</ul>
</div>
</div>
{% endcomment %}
</div>
</div>

@ -52,7 +52,7 @@
</div>
<div class="rq-form service-page" {% if form.errors %}style="display:block"{% endif %}>
<form action="#" method="post">{% csrf_token %}
<form method="post">{% csrf_token %}
<hr />

@ -50,7 +50,8 @@
</div>
<div class="rq-form service-page" {% if form.errors %}style="display:block"{% endif %}>
<form action="#" method="post">{% csrf_token %}
{{ form.errors }}
<form method="post">{% csrf_token %}
<hr />
@ -198,7 +199,7 @@
</div>
<hr />
{% comment %}
<div class="i-staff">
<div class="sect-title"><a href="#">{% trans 'Наши специалисты' %}</a></div>
@ -254,6 +255,7 @@
<a class="button more" href="#">{% trans 'Все переводчики' %}</a>
</div>
{% endcomment %}
</div>

@ -97,6 +97,7 @@ class TagActiveManager(TranslationManager):
models where theme defines activity:
- exposition
"""
cache_time = 600
def all(self):
lang = translation.get_language()
qs = super(TagActiveManager, self).select_related('exposition_tags').\
@ -104,3 +105,34 @@ class TagActiveManager(TranslationManager):
.order_by('translations__name').distinct()
return qs
def expo_tag(self):
lang = translation.get_language()
key = 'used_expo_tags_%s'%lang
cached_tags = cache.get(key)
if cached_tags:
return cached_tags
else:
from exposition.models import Exposition
tag_id = [item['tag'] for item in Exposition.enable.upcoming().values('tag').distinct()]
tags = list(self.language().filter(id__in=tag_id))
cache.set(key, tags, 300)
return tags
def conference_tags(self):
lang = translation.get_language()
key = 'used_conference_tags_count_%s'%lang
cached_tags = cache.get(key)
if cached_tags:
return cached_tags
else:
from conference.models import Conference
now = datetime.datetime.now().date()
# id of unique cities
tag_id = [item['tag'] for item in Conference.objects.filter(is_published=True, data_end__gte=now).values('tag').distinct()]
#themes = set(list(self.language().filter(id__in=themes_id).extra(select=sql)))
tags = set(list(self.language().filter(id__in=tag_id)))
tags = sorted(tags, key=lambda x: x.name)
cache.set(key, tags, self.cache_time)
return tags

Loading…
Cancel
Save