# -*- coding: utf-8 -*- import json from django.shortcuts import render_to_response from django.views.generic import FormView from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse, reverse_lazy from django.core.context_processors import csrf from django.conf import settings from django.core.cache import cache from functions.custom_views import ContextMixin from .forms import MainPageArticle from .forms import MainPageNews from .forms import MainPageThemes from .forms import EventSectionSettingsForm from .forms import EventDefaultDescriptionEditForm def handle_form(request, form): if request.POST: f = form(request.POST) if f.is_valid(): f.save() return HttpResponseRedirect(reverse('settings_main_page')) def handle_news(request): return handle_form(request, MainPageNews) def handle_articles(request): return handle_form(request, MainPageArticle) def handle_themes(request): return handle_form(request, MainPageThemes) from theme.models import Theme from article.models import Article def main_page(request): exposition_themes = Theme.objects.filter(main_page_expo__gt=0, types=Theme.types.exposition).order_by('main_page_expo') confrence_themes = Theme.objects.filter(main_page_conf__gt=0, types=Theme.types.conference).order_by('main_page_conf') news = Article.objects.news().filter(main_page=1) blogs = Article.objects.blogs().filter(main_page=1) themes = {'exposition_themes': exposition_themes, 'conference_themes': confrence_themes} news_form = MainPageNews(initial={'main_page_news':','.join(['%d'%item.id for item in news])}) a = [{'id': int(item.id), 'text': item.main_title} for item in news] news_form.fields['main_page_news'].widget.attrs['data-init-text'] = json.dumps(a) article_form = MainPageArticle(initial={'article' : blogs}) args = {'theme_form' : MainPageThemes(initial=themes), 'article_form' : article_form, 'news_form' : news_form, 'exposition_themes': list(map(str, exposition_themes.values_list('pk', flat=True))), 'confrence_themes': list(map(str, confrence_themes.values_list('pk', flat=True))), } args.update(csrf(request)) return render_to_response('c_admin/settings/main_page.html', args) class EventSectionSettings(ContextMixin, FormView): form_class = EventSectionSettingsForm template_name = 'c_admin/settings/sections.html' success_url = reverse_lazy('settings_sections') def get_initial(self): INI_CONFIG = settings.INI_CONFIG if not INI_CONFIG.has_section('sections'): return {} initial = {} for option, value in INI_CONFIG.items('sections'): try: initial[option] = json.loads(value) except: pass return initial def form_valid(self, form): form.save() keys = [ 'expo_city_catalog_ru', 'expo_city_catalog_en', 'expo_country_catalog_en', 'expo_country_catalog_ru', 'conf_country_catalog_ru', 'conf_country_catalog_en', 'conf_city_catalog_en', 'conf_city_catalog_ru', ] for key in keys: cache.delete(key) return super(EventSectionSettings, self).form_valid(form) class EventDefaultDescription(ContextMixin, FormView): form_class = EventDefaultDescriptionEditForm template_name = 'c_admin/settings/default_description.html' success_url = reverse_lazy('settings_default_description') def form_valid(self, form): form.save() return super(EventDefaultDescription, self).form_valid(form)