# -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.http import HttpResponseRedirect, HttpResponse from django.core.context_processors import csrf from django.conf import settings from django.forms.formsets import BaseFormSet, formset_factory from django.forms.models import modelformset_factory from django.contrib.contenttypes.models import ContentType from django.contrib.auth.decorators import login_required #forms and models from forms import ThemeForm, TagForm, ThemeDeleteForm, TagDeleteForm from models import Theme, Tag #custom views from functions.custom_views import objects_list, add_object, delete_object from functions.views_help import get_referer def theme_all(request): return objects_list(request, Theme, 'theme_all.html') def tag_all(request): return objects_list(request, Tag, 'tag_all.html') def theme_add(request): return add_object(request, ThemeForm, 'theme_add.html', '/admin/theme/theme/all') def tag_add(request): return add_object(request, TagForm, 'tag_add.html', '/admin/theme/tag/all') def theme_delete(request, theme_id): return delete_object(request, Theme, ThemeDeleteForm, theme_id, '/admin/theme/theme/all') def tag_delete(request, tag_id): return delete_object(request, Tag, TagDeleteForm, tag_id, '/admin/theme/tag/all') @login_required def theme_copy(request, theme_id): theme = Theme.objects.safe_get(id=theme_id) if not theme: return HttpResponseRedirect(get_referer(request)) else: theme.clone() return HttpResponseRedirect(get_referer(request)) @login_required def tag_copy(request, tag_id): tag = Tag.objects.safe_get(id=tag_id) if not tag: return HttpResponseRedirect(get_referer(request)) else: tag.clone() return HttpResponseRedirect(get_referer(request)) @login_required def theme_change(request, theme_id=None): try: theme = Theme.objects.get(id=theme_id) except: return HttpResponseRedirect('/admin/theme/theme/all') if request.POST: form = ThemeForm(request.POST) if form.is_valid(): form.save(theme_id) return HttpResponseRedirect('/admin/theme/theme/all') else: data = {} #bitfeild data['types'] = [item for item, bool in theme.types if bool==True] #data from translated fields for code, name in settings.LANGUAGES: obj = Theme._meta.translations_model.objects.get(language_code = code,master__id=theme_id) #access to translated fields data['name_%s'%code] = obj.name data['description_%s'%code] = obj.description data['main_title_%s'%code] = obj.main_title data['title_%s'%code] = obj.title data['keywords_%s'%code] = obj.keywords data['descriptions_%s'%code] = obj.descriptions form = ThemeForm(data) args = {} args.update(csrf(request)) args['form'] = form args['languages'] = settings.LANGUAGES args['theme_id'] = theme_id return render_to_response('theme_add.html', args) @login_required def tag_change(request, tag_id=None): try: tag = Tag.objects.get(id=tag_id) except: return HttpResponseRedirect('/admin/theme/tag/all') if request.POST: form = TagForm(request.POST) if form.is_valid(): form.save(tag_id) return HttpResponseRedirect('/admin/theme/tag/all') else: data = {} if tag.theme: data['theme'] = tag.theme.id #data from translated fields for code, name in settings.LANGUAGES: obj = Tag._meta.translations_model.objects.get(language_code = code,master__id=tag_id) #access to translated fields data['name_%s'%code] = obj.name data['description_%s'%code] = obj.description data['main_title_%s'%code] = obj.main_title data['title_%s'%code] = obj.title data['keywords_%s'%code] = obj.keywords data['descriptions_%s'%code] = obj.descriptions form = TagForm(data) args = {} args.update(csrf(request)) args['form'] = form args['languages'] = settings.LANGUAGES args['tag_id'] = tag_id return render_to_response('tag_add.html', args) from django.http import HttpResponse import json def search_tag(request): theme = request.GET['theme'] theme_ids = theme.replace('theme=', '').split('&') tags = [] for id in theme_ids: t = Tag.objects.filter(theme__id=id) cur_theme_tag = [{'id': tag.id, 'label': tag.name} for tag in t] tags = tags +cur_theme_tag return HttpResponse(json.dumps(tags), content_type='application/json')