Commit 30.04.2015

remotes/origin/1203
Назар Котюк 11 years ago
parent 26ce593e5b
commit d55a811dc9
  1. 1
      article/admin.py
  2. 62
      article/management/commands/article_load.py
  3. 27
      article/management/commands/news_from_old.py
  4. 69
      article/management/commands/update_news.py
  5. 37
      article/models.py
  6. 2
      article/views.py
  7. 6
      conference/management/commands/conf_load.py
  8. 24
      exposition/admin.py
  9. 3
      exposition/admin_urls.py
  10. 24
      exposition/management/commands/exposition_load.py
  11. 11
      import_xls/excel_settings.py
  12. 27
      import_xls/utils.py
  13. 17
      proj/views.py
  14. 2
      service/views.py
  15. 14
      settings/admin.py
  16. 39
      settings/forms.py
  17. 4
      templates/admin/base.html
  18. 49
      templates/admin/settings/main_page.html
  19. 3
      templates/client/article/news.html
  20. 2
      templates/client/article/news_list.html
  21. 4
      templates/client/base_catalog.html
  22. 2
      templates/client/includes/article/news_on_main_logo.html
  23. 2
      templates/client/includes/article/news_preview.html
  24. 10
      templates/client/includes/article_tags.html
  25. 73
      templates/client/includes/news.html

@ -194,6 +194,7 @@ class BlogView(FormView):
class NewsList(ListView): class NewsList(ListView):
model = Article model = Article
template_name = 'article/article_admin_list.html' template_name = 'article/article_admin_list.html'
paginate_by = 20
def get_queryset(self): def get_queryset(self):
return self.model.objects.news() return self.model.objects.news()

@ -0,0 +1,62 @@
# -*- coding: utf-8 -*-
import xlrd
from django.core.management.base import BaseCommand
from django.conf import settings
from article.models import Article
from import_xls.excel_settings import article_sett
from django.db import IntegrityError
NEWS_FILE = settings.MEDIA_ROOT+'/import/news.xls'
class Command(BaseCommand):
def handle(self, *args, **options):
f = open(NEWS_FILE, 'r')
book = xlrd.open_workbook(file_contents=f.read())
sheet = book.sheet_by_index(0)
row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)]
labels = [label for label in row_list[0]]
existing = 0
for row_number, row in enumerate(row_list[2:]):
published = row[4]
if row[0] != '':
# in first column ids
try:
object = Article.objects.language('ru').get(id=int(row[0]))
object.type = Article.news
object.save()
print(object.type)
continue
except ValueError:
object = Article(type=Article.news)
object.translate('ru')
except Article.DoesNotExist:
object = Article(id= int(row[0]))
object.translate('ru')
existing += 1
else:
# if id blank - its a new place
object = Article(type=Article.news)
object.translate('ru')
for col_number, cell in enumerate(row):
label = labels[col_number]
setting = article_sett.get(label)
if setting is None:
continue
field_name = setting['field']
func = setting.get('func')
value = func(cell)
setattr(object, field_name, value)
object.publish_date = published
try:
object.save()
except Exception, e:
print(e)

@ -10,9 +10,9 @@ from django.db import IntegrityError
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
db = MySQLdb.connect(host="localhost", db = MySQLdb.connect(host="localhost",
user="kotzilla", user="expomap",
passwd="qazedc", passwd="7FbLtAGjse",
db="old_expomap", db="old_db",
charset='utf8', charset='utf8',
cursorclass=DictCursor) cursorclass=DictCursor)
cursor = db.cursor() cursor = db.cursor()
@ -22,18 +22,34 @@ class Command(BaseCommand):
cid as author, cid as author,
date_added as created date_added as created
FROM `latest_news` order by created DESC""" FROM `latest_news`
WHERE status = 1
AND `date_added` >= '2015-04-03'
order by created DESC"""
cursor.execute(sql) cursor.execute(sql)
result = cursor.fetchall() result = cursor.fetchall()
user = User.objects.get(id=1) user = User.objects.get(id=1)
Article.objects.news().delete() #Article.objects.news().delete()
for a in result: for a in result:
title = a['main_title']
id = a['id']
published = a['created']
#try:
# news = Article.objects.get(id=id)
#except Article.DoesNotExist:
# continue
#news.publish_date = published
#news.save()
if len(a['main_title'])>255 or not a['main_title']: if len(a['main_title'])>255 or not a['main_title']:
continue continue
article = Article(type=Article.news, article = Article(type=Article.news,
id=a['id'], id=a['id'],
created=a['created']) created=a['created'])
@ -58,5 +74,6 @@ class Command(BaseCommand):
#print(a['main_title']) #print(a['main_title'])

@ -0,0 +1,69 @@
# -*- coding: utf-8 -*-
import MySQLdb
import datetime
from django.utils.translation import activate
from MySQLdb.cursors import DictCursor
from django.core.management.base import BaseCommand, CommandError
from django.conf import settings
import xlrd
from import_xls.utils import to_theme, to_tag
from functions.translate import fill_with_signal
from article.models import Article
from accounts.models import User
from django.db import IntegrityError
from exposition.models import Exposition
NEWS_FILE = settings.MEDIA_ROOT+'/import/exported_news.xls'
BLOGS_FILE = settings.MEDIA_ROOT+'/import/blogs.xls'
class Command(BaseCommand):
def handle(self, *args, **options):
activate('ru')
f = open(BLOGS_FILE, 'r')
book = xlrd.open_workbook(file_contents=f.read())
sheet = book.sheet_by_index(0)
row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)]
print(len(row_list))
existing = 0
for row_number, row in enumerate(row_list[2:]):
id = int(row[0])
if id == 49:
continue
main_title = row[1]
theme = row[2]
tag = row[3]
description = row[4]
article = Article.objects.language('ru').get(id=id)
#article.main_title = main_title
#article.description = description
#article.save()
to_theme(article, theme)
to_tag(article, tag)
print(id)
"""
try:
expo = Exposition.objects.filter(translations__name=event)[0]
except IndexError:
expo = None
if expo:
article.exposition = expo
article.save()
print(id)
"""

@ -3,6 +3,7 @@ import copy
from django.db import models from django.db import models
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils import translation
from django.utils.timezone import now from django.utils.timezone import now
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from django.utils.html import strip_tags from django.utils.html import strip_tags
@ -10,10 +11,12 @@ from sorl.thumbnail import ImageField
from functions.url_utils import slugify, unique_slug from functions.url_utils import slugify, unique_slug
from functions.model_utils import base_concrete_model from functions.model_utils import base_concrete_model
from functions.form_check import translit_with_separator from functions.form_check import translit_with_separator
from django.core.cache import cache
class ArticleManager(TranslationManager): class ArticleManager(TranslationManager):
cache_time = 60
def safe_get(self, **kwargs): def safe_get(self, **kwargs):
model = self.model model = self.model
try: try:
@ -35,6 +38,30 @@ class ArticleManager(TranslationManager):
model = self.model model = self.model
return self.language().filter(type=model.blog) return self.language().filter(type=model.blog)
def main_page_news(self):
lang = translation.get_language()
key = 'main_page_news_%s'%lang
cached_news = cache.get(key)
if cached_news:
return cached_news
else:
news = list(self.news().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date')[:3])
cache.set(key, news, self.cache_time)
return news
def main_page_blogs(self):
lang = translation.get_language()
key = 'main_page_blogs_%s'%lang
cached_blogs = cache.get(key)
if cached_blogs:
return cached_blogs
else:
blogs = list(self.blogs().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date')[:3])
cache.set(key, blogs, self.cache_time)
return blogs
return list(self.blogs().filter(publish_date__isnull=False).order_by('-main_page', '-publish_date')[:3])
class Article(TranslatableModel): class Article(TranslatableModel):
""" """
Create Article model Create Article model
@ -213,6 +240,16 @@ class Article(TranslatableModel):
return preview[0] return preview[0]
else: else:
return None return None
def get_catalog(self):
if self.type == 1:
return '/blogs/'
elif self.type == 2:
return '/news/'
def similar(self):
themes = [item ['id'] for item in self.theme.all().values('id')]
return list(Article.objects.language().exclude(id=self.id).filter(type=self.type, publish_date__isnull=False, theme__in=themes).order_by('-publish_date')[:3])
from django.db.models.signals import post_save from django.db.models.signals import post_save
from functions.signal_handlers import post_save_handler from functions.signal_handlers import post_save_handler

@ -29,7 +29,7 @@ class NewsList(ListView):
return qs return qs
else: else:
return self.model.objects.news() return self.model.objects.news().filter(publish_date__isnull=False).order_by('-publish_date')
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(NewsList, self).get_context_data(object_list=self.object_list) context = super(NewsList, self).get_context_data(object_list=self.object_list)

@ -8,12 +8,13 @@ from django.db import IntegrityError
CONF_FILE = settings.MEDIA_ROOT+'/import/conf.xls' CONF_FILE = settings.MEDIA_ROOT+'/import/conf.xls'
ADDCONF_FILE = settings.MEDIA_ROOT+'/import/add_conf.xls'
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
f = open(CONF_FILE, 'r') f = open(ADDCONF_FILE, 'r')
book = xlrd.open_workbook(file_contents=f.read()) book = xlrd.open_workbook(file_contents=f.read())
sheet = book.sheet_by_index(0) sheet = book.sheet_by_index(0)
row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)] row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)]
@ -21,6 +22,8 @@ class Command(BaseCommand):
existing = 0 existing = 0
for row_number, row in enumerate(row_list[1:]): for row_number, row in enumerate(row_list[1:]):
if row[0] != '': if row[0] != '':
try: try:
@ -93,3 +96,4 @@ class Command(BaseCommand):
continue continue
else: else:
func(object, method['value']) func(object, method['value'])

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
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, HttpResponse
from django.core.context_processors import csrf from django.core.context_processors import csrf
@ -8,6 +9,7 @@ from django.forms.models import modelformset_factory
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
# models and forms # models and forms
from haystack.query import SearchQuerySet
from models import Exposition, TimeTable, Statistic, TmpTimeTable from models import Exposition, TimeTable, Statistic, TmpTimeTable
from forms import ExpositionCreateForm, ExpositionDeleteForm, TimeTableForm, StatisticForm, ExpositionFilterForm from forms import ExpositionCreateForm, ExpositionDeleteForm, TimeTableForm, StatisticForm, ExpositionFilterForm
from theme.models import Tag from theme.models import Tag
@ -361,3 +363,25 @@ class ExpositionListView(AdminListView):
def upload_exposition_photo(request, expo_id): def upload_exposition_photo(request, expo_id):
return upload_photo(request, expo_id, Exposition) return upload_photo(request, expo_id, Exposition)
def get_by_lang(item, field, lang='en'):
"""
:param item: searchresult object
field: translated field
:return:
"""
return getattr(item, field+'_'+lang)
from django.utils import translation
def search_expo(request):
term = request.GET['term'].capitalize()
lang = translation.get_language()
if not term:
qs = SearchQuerySet().models(Exposition).order_by('text')[:30]
else:
qs = SearchQuerySet().models(Exposition).autocomplete(content_auto=term).order_by('text')[:30]
result = [{'id': item.pk, 'label': get_by_lang(item, 'name', lang)} for item in qs]
return HttpResponse(json.dumps(result), content_type='application/json')

@ -11,8 +11,11 @@ urlpatterns = patterns('exposition.admin',
url(r'^all/$', ExpositionListView.as_view()), url(r'^all/$', ExpositionListView.as_view()),
url(r'^switch/(?P<url>.*)/(?P<action>.*)$', 'exposition_switch'), url(r'^switch/(?P<url>.*)/(?P<action>.*)$', 'exposition_switch'),
#url(r'^copy/(?P<url>.*)$', 'exposition_copy'), #url(r'^copy/(?P<url>.*)$', 'exposition_copy'),
url(r'^search/$', 'search_expo'),
url(r'^(?P<url>.*)/$', ExpositionView.as_view()), url(r'^(?P<url>.*)/$', ExpositionView.as_view()),
url(r'^$', ExpositionView.as_view()), url(r'^$', ExpositionView.as_view()),
) )

@ -5,6 +5,7 @@ from django.conf import settings
from exposition.models import Exposition from exposition.models import Exposition
from import_xls.excel_settings import event_sett from import_xls.excel_settings import event_sett
from django.db import IntegrityError from django.db import IntegrityError
from django.utils import translation
CHINA_FILE = settings.MEDIA_ROOT+'/import/expo_china_ru.xlsx' CHINA_FILE = settings.MEDIA_ROOT+'/import/expo_china_ru.xlsx'
GERMANY_FILE = settings.MEDIA_ROOT+'/import/expo_germany_ru.xlsx' GERMANY_FILE = settings.MEDIA_ROOT+'/import/expo_germany_ru.xlsx'
@ -17,22 +18,29 @@ LA_FILE = settings.MEDIA_ROOT+'/import/expo_la.xlsx'
NA_EU_ASIA_FILE = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa.xls' NA_EU_ASIA_FILE = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa.xls'
NA_EU_ASIA_FILE2 = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa_part2.xls' NA_EU_ASIA_FILE2 = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa_part2.xls'
RUSSIA_FILE = settings.MEDIA_ROOT+'/import/expo_russia.xls' RUSSIA_FILE = settings.MEDIA_ROOT+'/import/expo_russia.xls'
GEORGIA_FILE = settings.MEDIA_ROOT+'/import/georgia.xls'
class Command(BaseCommand): class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
f = open(RUSSIA_FILE, 'r')
f = open(GEORGIA_FILE, 'r')
book = xlrd.open_workbook(file_contents=f.read()) book = xlrd.open_workbook(file_contents=f.read())
sheet = book.sheet_by_index(0) sheet = book.sheet_by_index(0)
row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)] row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)]
labels = [label for label in row_list[0]] labels = [label for label in row_list[0]]
existing = 0 existing = 0
for row_number, row in enumerate(row_list[1:]): for row_number, row in enumerate(row_list[1:]):
#print(row_number) #print(row_number)
name = row[2]
if row[0] != '': if row[0] != '':
# in first column ids # in first column ids
try: try:
object = Exposition.objects.language('ru').get(id=int(row[0])) object = Exposition.objects.language('ru').get(id=int(row[0]))
existing += 1 existing += 1
@ -49,6 +57,15 @@ class Command(BaseCommand):
# if id blank - its a new place # if id blank - its a new place
object = Exposition() object = Exposition()
object.translate('ru') object.translate('ru')
"""
try:
object = Exposition.objects.language('ru').filter(translations__name=name)[0]
existing += 1
except IndexError:
pass
"""
methods = [] methods = []
for col_number, cell in enumerate(row): for col_number, cell in enumerate(row):
@ -83,12 +100,13 @@ class Command(BaseCommand):
pass pass
else: else:
setattr(object, field_name, value) setattr(object, field_name, value)
try: try:
object.save() object.save()
except IntegrityError: except IntegrityError:
continue continue
print('post save %s'% str(object)) print('post save %s'% str(object))
@ -101,3 +119,5 @@ class Command(BaseCommand):
continue continue
else: else:
func(object, method['value']) func(object, method['value'])
print(existing)

@ -330,6 +330,17 @@ place_exp_sett = {
u'Мобильное приложение':{u'field': u'mobile_application', u'func': bool}, u'Мобильное приложение':{u'field': u'mobile_application', u'func': bool},
} }
article_sett = {
u'ID':{u'field': u'id', u'func': to_int},
u'Заголовок':{u'field': u'main_title', u'func': unicode},
u'Описание':{u'field': u'description', u'func': unicode},
u'Айди автора':{u'field': u'author', u'func': to_user},
u'Создана':{u'field': u'created', u'func': to_datetime}
}
event_sett = { event_sett = {
u'ID':{u'field': u'id', u'func': to_int}, u'ID':{u'field': u'id', u'func': to_int},
u'Url':{u'field': u'url', u'func': unicode}, u'Url':{u'field': u'url', u'func': unicode},

@ -12,6 +12,7 @@ from city.models import City
from theme.models import Theme, Tag from theme.models import Theme, Tag
from functions.files import get_alternative_filename from functions.files import get_alternative_filename
from exposition.models import BIT_AUDIENCE from exposition.models import BIT_AUDIENCE
from accounts.models import User
def to_int(val): def to_int(val):
@ -29,12 +30,23 @@ def to_date(value):
return None return None
if isinstance(value, unicode) or isinstance(value, str): if isinstance(value, unicode) or isinstance(value, str):
try:
t = time.strptime(value, "%d.%m.%Y") t = time.strptime(value, "%d.%m.%Y")
except ValueError:
t = time.strptime(value, "%d/%m/%Y")
if isinstance(value, float): if isinstance(value, float):
t = xlrd.xldate_as_tuple(value, 0)+(0,0,0) t = xlrd.xldate_as_tuple(value, 0)+(0,0,0)
return time.strftime("%Y-%m-%d", t) return time.strftime("%Y-%m-%d", t)
def to_datetime(value):
if not value:
return None
if isinstance(value, unicode) or isinstance(value, str):
t = time.strptime(value, "%Y-%m-%d %H:%M:%S")
return time.strftime("%Y-%m-%d %H:%M:%S", t)
def to_country(value): def to_country(value):
try: try:
query = get_translation_aware_manager(Country) query = get_translation_aware_manager(Country)
@ -72,6 +84,9 @@ def to_theme(obj, value):
else: else:
theme_ids = value.split(',') theme_ids = value.split(',')
if theme_ids == ['']:
return
obj.theme.clear()
obj.theme.add(*Theme.objects.filter(id__in=theme_ids)) obj.theme.add(*Theme.objects.filter(id__in=theme_ids))
def to_tag(obj,value): def to_tag(obj,value):
@ -80,6 +95,7 @@ def to_tag(obj,value):
names = value.split(',') names = value.split(',')
translation.activate('en') translation.activate('en')
if names: if names:
obj.tag.clear()
obj.tag.add(*Tag.objects.filter(translations__name__in=names, theme__in=obj.theme.all())) obj.tag.add(*Tag.objects.filter(translations__name__in=names, theme__in=obj.theme.all()))
else: else:
return return
@ -191,3 +207,10 @@ def check_quality_label(obj, value, label):
if value: if value:
setattr(bit, label, True) setattr(bit, label, True)
return bit return bit
def to_user(value):
try:
return User.objects.get(id=value)
except User.DoesNotExist:
return User.objects.get(id=1)

@ -17,15 +17,15 @@ from accounts.forms import RegistrationCompleteForm
def expo_context(request): def expo_context(request):
cont = {'theme_search_form': ThemeSearch(), 'expo_catalog': Exposition.catalog, cont = {'theme_search_form': ThemeSearch(), 'expo_catalog': Exposition.catalog,
'book_aid': settings.BOOKING_AID} 'book_aid': settings.BOOKING_AID, 'blogs': Article.objects.main_page_blogs(),
'news_list': Article.objects.main_page_news()
}
user = request.user user = request.user
if not user.is_anonymous() and not user.url: if not user.is_anonymous() and not user.url:
cont.update({'reg_complete': RegistrationCompleteForm(instance=user)}) cont.update({'reg_complete': RegistrationCompleteForm(instance=user)})
if not request.GET: if not request.GET:
cont.update({'search_form': ExpositionSearchForm()}) cont.update({'search_form': ExpositionSearchForm()})
return cont return cont
@ -34,16 +34,13 @@ class MainPageView(TemplateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(MainPageView, self).get_context_data(**kwargs) context = super(MainPageView, self).get_context_data(**kwargs)
events = Exposition.objects.language().filter(main_page=1)
events = Exposition.objects.language().select_related('country', 'city', 'place').filter(main_page=1)
exposition_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.exposition)[:6] exposition_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.exposition)[:6]
conference_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.conference)[:6] conference_themes = Theme.objects.language().order_by('-main_page').filter(types=Theme.types.conference)[:6]
news_list = Article.objects.news().filter(main_page=1)
blogs = Article.objects.blogs().filter(main_page=1)
args = {'events': events, 'exposition_themes': exposition_themes,
'conference_themes': conference_themes, 'news_list': news_list,
'blogs': blogs, 'search_form': ExpositionSearchForm, 'search_action': '/expo/search/'}
args = {'events': events, 'exposition_themes': exposition_themes, 'conference_themes': conference_themes,
'search_form': ExpositionSearchForm, 'search_action': '/expo/search/'}
context.update(args) context.update(args)

@ -47,6 +47,8 @@ def advertise(request):
response['errors'] = form.errors response['errors'] = form.errors
return HttpResponse(json.dumps(response), content_type='application/json') return HttpResponse(json.dumps(response), content_type='application/json')
else:
raise HttpResponse('not ajax')
from service.models import CallBack, Visit, Translation, Advertising, Participation, Remote, Tickets from service.models import CallBack, Visit, Translation, Advertising, Participation, Remote, Tickets

@ -62,10 +62,10 @@ import datetime
def main_page(request): def main_page(request):
now = datetime.datetime.now() now = datetime.datetime.now()
expositions = Exposition.objects.filter(main_page__gt=0) expositions = Exposition.objects.filter(main_page=1)
conferences = Conference.objects.filter(main_page__gt=0) conferences = Conference.objects.filter(main_page=1)
seminars = Seminar.objects.filter(main_page__gt=0) seminars = Seminar.objects.filter(main_page=1)
webinars = Webinar.objects.filter(main_page__gt=0) webinars = Webinar.objects.filter(main_page=1)
events = {'expositions':expositions, 'conferences': conferences, events = {'expositions':expositions, 'conferences': conferences,
'seminars':seminars, 'webinars': webinars} 'seminars':seminars, 'webinars': webinars}
@ -83,9 +83,9 @@ def main_page(request):
news_form.fields['main_page_news'].widget.attrs['data-init-text'] = json.dumps(a) 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])}
event_form = MainPageEvent(initial=event_data)
args = {'event_form' : MainPageEvent(initial=events), 'theme_form' : MainPageThemes(initial=themes), 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, 'photoreport_form' : MainPagePhotoreport(),}
args.update(csrf(request)) args.update(csrf(request))

@ -77,6 +77,34 @@ from article.models import Article
import datetime import datetime
class MainPageEvent(forms.Form):
expositions = forms.CharField(label=u'Выставки', widget=forms.HiddenInput(), required=False)
conferences = forms.CharField(label=u'Конференции', widget=forms.HiddenInput(), required=False)
def save(self):
data = self.cleaned_data
expositions = data['expositions']
conferences = data['conferences']
Exposition.objects.filter(main_page=1).update(main_page=0)
Exposition.objects.filter(id__in=expositions).update(main_page=1)
#Conference.objects.filter(main_page=1).update(main_page=0)
#Conference.update(main_page=1)
def clean_expositions(self):
expositions = self.cleaned_data.get('expositions')
if expositions:
res = []
for id in expositions.split(','):
try:
res.append(int(id))
except:
continue
return res
else:
return []
"""
class MainPageEvent(forms.Form): class MainPageEvent(forms.Form):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(MainPageEvent, self).__init__(*args, **kwargs) super(MainPageEvent, self).__init__(*args, **kwargs)
@ -112,26 +140,27 @@ class MainPageEvent(forms.Form):
seminars.update(main_page=1) seminars.update(main_page=1)
Webinar.objects.all().update(main_page=0) Webinar.objects.all().update(main_page=0)
webinars.update(main_page=1) 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),
required=False) required=False)
conference_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.conference), conference_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.conference),
required=False) required=False)
seminar_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.seminar), #seminar_themes = forms.ModelMultipleChoiceField(queryset=Theme.objects.filter(types=Theme.types.seminar),
required=False) # required=False)
def save(self): def save(self):
data = self.cleaned_data data = self.cleaned_data
exposition_themes = data['exposition_themes'] exposition_themes = data['exposition_themes']
conference_themes = data['conference_themes'] conference_themes = data['conference_themes']
seminar_themes = data['seminar_themes'] #seminar_themes = data['seminar_themes']
Theme.objects.filter(types=Theme.types.exposition).update(main_page=0) Theme.objects.filter(types=Theme.types.exposition).update(main_page=0)
Theme.objects.filter(types=Theme.types.conference).update(main_page=0) Theme.objects.filter(types=Theme.types.conference).update(main_page=0)
Theme.objects.filter(types=Theme.types.seminar).update(main_page=0) #Theme.objects.filter(types=Theme.types.seminar).update(main_page=0)
exposition_themes.update(main_page=1) exposition_themes.update(main_page=1)
conference_themes.update(main_page=1) conference_themes.update(main_page=1)
seminar_themes.update(main_page=1) #seminar_themes.update(main_page=1)

@ -103,6 +103,8 @@
<li><a href="/admin/service/all">Услуги</a></li> <li><a href="/admin/service/all">Услуги</a></li>
<li><a href="/admin/settings">Настройки</a></li> <li><a href="/admin/settings">Настройки</a></li>
<li><a href="/admin/settings/main-page/">Главная страница</a></li> <li><a href="/admin/settings/main-page/">Главная страница</a></li>
<li><a href="/admin/meta/all/">Мета</a></li>
<li class="divider"></li> <li class="divider"></li>
<li><a href="/admin/import-theme">Импорт тематик</a></li> <li><a href="/admin/import-theme">Импорт тематик</a></li>
<li><a href="/admin/import-tag">Импорт тегов</a></li> <li><a href="/admin/import-tag">Импорт тегов</a></li>
@ -175,4 +177,6 @@
</div> </div>
</body> </body>
<script src="{% static 'custom_js/main.js' %}"></script> <script src="{% static 'custom_js/main.js' %}"></script>
{% block bot_scripts %}
{% endblock %}
</html> </html>

@ -16,11 +16,13 @@
<div class="box-content"> <div class="box-content">
<form method="post" class="form-inline" action="events/">{% csrf_token %} <form method="post" class="form-inline" action="events/">{% csrf_token %}
{{ event_form.expositions.label }}:&nbsp;&nbsp;&nbsp;&nbsp;{{event_form.expositions }}&nbsp;&nbsp;&nbsp;&nbsp; {{ event_form.expositions.label }}:&nbsp;&nbsp;&nbsp;&nbsp;{{event_form.expositions }}&nbsp;&nbsp;&nbsp;&nbsp;
{% comment %}
{{ event_form.conferences.label }}:&nbsp;&nbsp;&nbsp;&nbsp; {{event_form.conferences }} {{ event_form.conferences.label }}:&nbsp;&nbsp;&nbsp;&nbsp; {{event_form.conferences }}
<br/> <br/>
<br/> <br/>
{{ event_form.seminars.label }}:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{event_form.seminars }}&nbsp;&nbsp;&nbsp;&nbsp; {{ event_form.seminars.label }}:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{event_form.seminars }}&nbsp;&nbsp;&nbsp;&nbsp;
{{ event_form.webinars.label }}:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {{event_form.webinars }} {{ event_form.webinars.label }}:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {{event_form.webinars }}
{% endcomment %}
<hr/> <hr/>
@ -85,3 +87,50 @@
</div> </div>
</div> </div>
{% endblock %} {% endblock %}
{% block bot_scripts %}
<script>
$(document).ready(function(){
$('#id_expositions').select2({
placeholder: "Выставки",
multiple: true,
ajax: {
url: "/admin/exposition/search/",
width: '550px',
dataType: "json",
quietMillis: 200,
multiple: true,
data: function(term, page, theme){
return {term: term,
page: page};
},
results: function (data) {
var results = [];
$.each(data, function(index, item){
results.push({
id: item.id,
text: item.label
});
});
return {results: results};
}
},
initSelection : function(element, callback) {
var data = [];
$(element.val().split(",")).each(function(i) {
var item = this.split(':');
data.push({
id: item[0],
text: item[1]
});
});
callback(data);
}
});
});
</script>
{% endblock %}

@ -35,7 +35,6 @@
</div> </div>
<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="/news/">{% trans 'Все новости' %}</a></div> <div class="sect-title blog_link">{% trans 'Похожие новости' %}<a class="button more" href="/news/">{% trans 'Все новости' %}</a></div>
<div class="cat-list sc-comments"> <div class="cat-list sc-comments">
@ -45,7 +44,7 @@
<a href="{{ news.get_permanent_url }}" title="">{% include 'includes/show_logo.html' with obj=news %}</a> <a href="{{ news.get_permanent_url }}" title="">{% include 'includes/show_logo.html' with obj=news %}</a>
<h3><a href="{{ news.get_permanent_url }}" title="">{{ news.main_title }}</a></h3> <h3><a href="{{ news.get_permanent_url }}" title="">{{ news.main_title }}</a></h3>
<p>{{ news.preview }}</p> <p>{{ news.preview }}</p>
<strong><span>{{ news.created|date:"d E Y" }}</span>{% if news.get_event %}<a href="{{ news.get_event.get_permanent_url }}" title=""><b>{{ news.get_event.name }}</b></a><{% endif %}/strong> <strong><span>{{ news.publish_date|date:"d E Y" }}</span>{% if news.get_event %}<a href="{{ news.get_event.get_permanent_url }}" title=""><b>{{ news.get_event.name }}</b></a><{% endif %}</strong>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

@ -44,7 +44,7 @@
{% include 'includes/article/news_preview.html' with obj=news %}</a> {% include 'includes/article/news_preview.html' with obj=news %}</a>
<h3><a href="{{ news.get_permanent_url }}" title="">{{ news.main_title }}</a></h3> <h3><a href="{{ news.get_permanent_url }}" title="">{{ news.main_title }}</a></h3>
{{ news.preview }} {{ news.preview }}
<strong><span>{{ news.created|date:"d E Y" }}</span>{% with event=news.get_event %}{% if event %}<a href="{{ event.get_permanent_url }}" title=""><b>{{ event.name }}</b></a>{% endif %}{% endwith %}</strong> <strong><span>{{ news.publish_date|date:"d E Y" }}</span>{% with event=news.get_event %}{% if event %}<a href="{{ event.get_permanent_url }}" title=""><b>{{ event.name }}</b></a>{% endif %}{% endwith %}</strong>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

@ -40,7 +40,9 @@
{% endblock %} {% endblock %}
{% include 'client/includes/side_confs.html' %} {% include 'client/includes/side_confs.html' %}
<hr /> <hr />
{% include 'client/includes/news.html' %} <div class="s-news-list">
{% include 'client/includes/news.html' with news=news_list %}
</div>
{% block aside_vk %} {% block aside_vk %}
<div class="vk-widget"> <div class="vk-widget">

@ -2,7 +2,7 @@
{% load thumbnail %} {% load thumbnail %}
{% if obj.logo %} {% if obj.logo %}
{% thumbnail obj.logo "80x80" as im %} {% thumbnail obj.logo "80x80" format="PNG" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" class="pic" alt=""> <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" class="pic" alt="">
{% endthumbnail %} {% endthumbnail %}
{% else %} {% else %}

@ -2,7 +2,7 @@
{% load thumbnail %} {% load thumbnail %}
{% if obj.logo %} {% if obj.logo %}
{% thumbnail obj.logo "70x70" as im %} {% thumbnail obj.logo "70x70" format="PNG" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" class="pic" alt=""> <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" class="pic" alt="">
{% endthumbnail %} {% endthumbnail %}
{% else %} {% else %}

@ -1,4 +1,6 @@
<i class="icon"></i>
{% for tag in obj.tag.all %} {% with tags=obj.tag.all %}
<a href="?tag={{ tag.id }}" title="">{{ tag.name }}</a>, {% for tag in obj.tag.all %}
{% endfor %} <a href="{{ obj.get_catalog }}?tag={{ tag.id }}" title="">{{ tag.name }}</a>{% if forloop.counter != tags|length %},{% endif %}
{% endfor %}
{% endwith %}

@ -1,42 +1,45 @@
{% load static %}
{% load i18n %} {% load i18n %}
{% load template_filters %}
<div class="s-news-list"> {% if False|random_social %}
<header> <header>
<a href="#">{% trans 'Новости событий' %}</a> <a href="/news/">{% trans 'Новости событий' %}</a>
</header> </header>
<ul> <ul>
<!-- {% for item in news_list %}
<li> <li>
<a href="#"> <a href="{{ item.get_permanent_url }}">
<span class="nl-pict"></span> <span class="nl-pict">
<span class="nl-body"> {% include 'client/includes/article/news_on_main_logo.html' with obj=item %}
<span class="nl-text">ОАО «НПК «РЕКОД» на Международной конференции «Земля из космоса — наиболее эффективные решения»</span> </span>
<span class="nl-date">20 августа</span> <span class="nl-body">
</span> <span class="nl-text">{{ item.main_title }}</span>
</a> <span class="nl-date">{{ item.created|date:"d E Y" }}</span>
</li> </span>
<li> </a>
<a href="#"> </li>
<span class="nl-pict"><img src="img/_del-temp/expo-bn-2-s.jpg" alt="" /></span> {% endfor %}
<span class="nl-body">
<span class="nl-text">«Лоскутная радуга» на выставке «АРТ-Красноярск-2013»</span>
<span class="nl-date">20 августа</span>
</span>
</a>
</li>
<li>
<a href="#">
<span class="nl-pict"><img src="img/_del-temp/expo-bn-2-s.jpg" alt="" /></span>
<span class="nl-body">
<span class="nl-text">На выставке «Арт-Красноярск» организуют настоящий праздник искусства</span>
<span class="nl-date">20 августа</span>
</span>
</a>
</li>
-->
</ul> </ul>
<footer><a class="more" href="/news/">{% trans 'Все новости' %}</a></footer> <footer><a class="more" href="/news/">{% trans 'Все новости' %}</a></footer>
</div> {% else %}
<header>
<a href="/blogs/">{% trans 'Статьи' %}</a>
</header>
<ul>
{% for item in blogs %}
<li>
<a href="{{ item.get_permanent_url }}">
<span class="nl-pict">
{% include 'client/includes/article/news_on_main_logo.html' with obj=item %}
</span>
<span class="nl-body">
<span class="nl-text">{{ item.main_title }}</span>
<span class="nl-date">{{ item.created|date:"d E Y" }}</span>
</span>
</a>
</li>
{% endfor %}
</ul>
<footer><a class="more" href="/blogs/">{% trans 'Все статьи' %}</a></footer>
{% endif %}
Loading…
Cancel
Save