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) about = models.TextField(verbose_name='О себе', blank=True)
avatar = models.ImageField(verbose_name='Фото', upload_to='accounts/avatar/', blank=True) avatar = models.ImageField(verbose_name='Фото', upload_to='accounts/avatar/', blank=True)
skype = models.CharField(blank=True, max_length=255) skype = models.CharField(blank=True, max_length=255)
facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True) facebook = models.URLField(verbose_name=_(u'Facebook'), blank=True, max_length=255)
twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True) twitter = models.URLField(verbose_name=_(u'Twitter'), blank=True,max_length=255)
linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True) linkedin = models.URLField(verbose_name=_(u'LinkedIn'), blank=True, max_length=255)
vk = models.URLField(verbose_name=_(u'В контакте'), blank=True) vk = models.URLField(verbose_name=_(u'В контакте'), blank=True, max_length=255)
# meta # meta
title = models.CharField(max_length=255, blank=True) 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 MONTHES = settings.MONTHES
class ConferenceBy(MetadataMixin, ListView): class ConferenceBy(JitterCacheMixin, MetadataMixin, ListView):
cache_range = settings.CACHE_RANGE
template_name = 'conference/conference_by.html' template_name = 'conference/conference_by.html'
title1 = '' title1 = ''
title2 = '' title2 = ''
@ -40,7 +41,6 @@ class ConferenceBy(MetadataMixin, ListView):
class ConferenceByCountry(ConferenceBy): class ConferenceByCountry(ConferenceBy):
cache_range = [60, 120]
model = Country model = Country
title1 = _(u'По странам') title1 = _(u'По странам')
title2 = _(u'Коференции мира по странам') title2 = _(u'Коференции мира по странам')
@ -55,7 +55,6 @@ class ConferenceByCountry(ConferenceBy):
class ConferenceByTheme(ConferenceBy): class ConferenceByTheme(ConferenceBy):
cache_range = [60, 120]
model = Theme model = Theme
title1 = _(u'По тематикам') title1 = _(u'По тематикам')
title2 = _(u'Коференции мира по тематикам') title2 = _(u'Коференции мира по тематикам')
@ -70,7 +69,6 @@ class ConferenceByTheme(ConferenceBy):
class ConferenceByCity(ConferenceBy): class ConferenceByCity(ConferenceBy):
cache_range = [60, 120]
model = City model = City
title1 = _(u'По городам') title1 = _(u'По городам')
title2 = _(u'Коференции мира по городам') title2 = _(u'Коференции мира по городам')
@ -84,7 +82,8 @@ class ConferenceByCity(ConferenceBy):
# .order_by('translations__name').distinct() # .order_by('translations__name').distinct()
class ConferenceCatalog(MetadataMixin, ListView): class ConferenceCatalog(JitterCacheMixin, MetadataMixin, ListView):
cache_range = settings.CACHE_RANGE
model = Conference model = Conference
paginate_by = settings.CLIENT_PAGINATION paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/conference/catalog.html' template_name = 'client/conference/catalog.html'
@ -276,6 +275,7 @@ class ConferenceServiceView(FormMixin, DetailView):
model = Conference model = Conference
slug_field = 'url' slug_field = 'url'
service = None service = None
success_url = '/service/thanks/'
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
@ -310,7 +310,7 @@ class ConferenceServiceView(FormMixin, DetailView):
order.conference = self.object order.conference = self.object
order.save() order.save()
messages.success(self.request, _(u'Ваш запрос был успешно отправлен')) messages.success(self.request, _(u'Ваш запрос был успешно отправлен'))
return HttpResponseRedirect(self.request.path) return HttpResponseRedirect(self.success_url)
def get_initial(self): 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 model = Conference
slug_field = 'url' slug_field = 'url'
template_name = 'client/conference/conference_detail.html' template_name = 'client/conference/conference_detail.html'

@ -175,6 +175,8 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
def get_parent(self): def get_parent(self):
return {} return {}
def get_absolute_url(self):
return self.get_permanent_url()
def get_index_text(self): def get_index_text(self):
translation.activate('ru') 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' template_name = 'exposition/exposition_by.html'
title1 = '' title1 = ''
title2 = '' 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 model = Exposition
slug_field = 'url' slug_field = 'url'
template_name = 'client/exposition/exposition_detail.html' template_name = 'client/exposition/exposition_detail.html'
@ -168,6 +169,7 @@ class ExpositionServiceView(MetadataMixin, FormMixin, DetailView):
model = Exposition model = Exposition
slug_field = 'url' slug_field = 'url'
service = None service = None
success_url = '/service/thanks/'
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
service_url = self.kwargs.get('service_url') service_url = self.kwargs.get('service_url')
@ -208,7 +210,7 @@ class ExpositionServiceView(MetadataMixin, FormMixin, DetailView):
order.exposition = self.object order.exposition = self.object
order.save() order.save()
messages.success(self.request, _(u'Ваш запрос был успешно отправлен')) messages.success(self.request, _(u'Ваш запрос был успешно отправлен'))
return HttpResponseRedirect(self.request.path) return HttpResponseRedirect(self.success_url)
def get_initial(self): def get_initial(self):
""" """

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

@ -277,6 +277,7 @@ INSTALLED_APPS = (
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.contrib.humanize', 'django.contrib.humanize',
'django.contrib.sitemaps',
'haystack', 'haystack',
#custom modules #custom modules
'accounts', 'accounts',
@ -304,6 +305,7 @@ INSTALLED_APPS = (
'translator', 'translator',
'webinar', 'webinar',
'meta', 'meta',
'banners',
#django modules #django modules
'sorl.thumbnail', # for logos 'sorl.thumbnail', # for logos
'photologue', # photogallery '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' template_name = 'robot.txt'
content_type = 'text/plain' 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('', urlpatterns = patterns('',
#url(r'^__debug__/', include(debug_toolbar.urls)), #url(r'^__debug__/', include(debug_toolbar.urls)),
url(r'^admin/', include('proj.admin_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'^robot\.txt$', Robot.as_view()),
url(r'^$', MainPageView.as_view()), url(r'^$', MainPageView.as_view()),
url(r'^theme/', include('theme.urls')), url(r'^theme/', include('theme.urls')),
@ -43,8 +57,9 @@ urlpatterns = patterns('',
url(r'^accounts/', include('registration.backends.default.urls')), url(r'^accounts/', include('registration.backends.default.urls')),
url(r'^', include('password_reset.urls')), url(r'^', include('password_reset.urls')),
url(r'^i18n/', include('django.conf.urls.i18n')), url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^redirect/', include('banners.urls')),
#url(r'^social/', include('social_auth.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'^search/', include('haystack.urls')),
url(r'^', include('service.urls')), url(r'^', include('service.urls')),
) )

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

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

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

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

@ -22,11 +22,8 @@
{% if theme_for_filter.id == 27 or theme_for_filter.id == 9 or theme_for_filter.id == 48 %} {% if theme_for_filter.id == 27 or theme_for_filter.id == 9 or theme_for_filter.id == 48 %}
<div class="sbnr"> <div class="sbnr">
<div class="sbnr-wrap"> <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="" /> <img src="{% static 'client/img/partners/imgo.jpg' %}" alt="" />
</a> </a>
</div> </div>
</div> </div>
@ -68,7 +65,7 @@
{% endwith %} {% endwith %}
{% block under_search_baner %} {% block under_search_baner %}
<div class="abn"> <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> </div>
{% endblock %} {% endblock %}

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

@ -28,7 +28,7 @@
{% if object.total_area %} {% if object.total_area %}
<div class="cli-dim">{{ object.total_area }} м2</div> <div class="cli-dim">{{ object.total_area }} м2</div>
{% endif %} {% 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> </div>
</div> </div>

@ -197,7 +197,8 @@
<div class="ic-wrap"> <div class="ic-wrap">
<div class="ic-col"> <div class="ic-col">
<div class="ic-addr">{{ place.adress }}</div> <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>
<div class="ic-col"> <div class="ic-col">
<ul class="tels"> <ul class="tels">

@ -28,7 +28,12 @@
{{ obj.data_begin|date:"F j" }} {{ obj.data_begin|date:"F j" }}
{% endifequal %} {% endifequal %}
{% else %} {% 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 %} {% else %}
{{ obj.data_begin }} {{ obj.data_begin }}
{% endif %} {% endif %}

@ -58,7 +58,7 @@
<div class="abn"> <div class="abn">
{% block menu_banner %} {% 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 %} {% endblock %}
</div> </div>
</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 %} {% block bread_scrumbs %}
<div class="bread-crumbs"> <div class="bread-crumbs">
<a href="/">{% trans 'Главная страница' %}</a> <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 }}country/{{ object.country.url }}/">{{ object.country }}</a>
<a href="{{ object.catalog }}city/{{ object.city.url }}/">{{ object.city }}</a> <a href="{{ object.catalog }}city/{{ object.city.url }}/">{{ object.city }}</a>
<a href="{{ object.get_permanent_url }}">{{ object.name }}</a> <a href="{{ object.get_permanent_url }}">{{ object.name }}</a>

@ -16,7 +16,7 @@
{% endblock %} {% endblock %}
{% block content_list %} {% 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 %} {% endblock %}
{% block paginator %} {% block paginator %}

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

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

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

@ -55,7 +55,7 @@
</div> </div>
<div class="rq-form service-page" {% if form.errors %}style="display:block"{% endif %}> <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 /> <hr />

@ -58,7 +58,7 @@
</div> </div>
<div class="rq-form service-page" {% if form.errors %}style="display:block"{% endif %}> <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 /> <hr />

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

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

@ -52,7 +52,7 @@
</div> </div>
<div class="rq-form service-page" {% if form.errors %}style="display:block"{% endif %}> <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 /> <hr />

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

@ -97,6 +97,7 @@ class TagActiveManager(TranslationManager):
models where theme defines activity: models where theme defines activity:
- exposition - exposition
""" """
cache_time = 600
def all(self): def all(self):
lang = translation.get_language() lang = translation.get_language()
qs = super(TagActiveManager, self).select_related('exposition_tags').\ qs = super(TagActiveManager, self).select_related('exposition_tags').\
@ -104,3 +105,34 @@ class TagActiveManager(TranslationManager):
.order_by('translations__name').distinct() .order_by('translations__name').distinct()
return qs 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