# -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.http import HttpResponseRedirect from django.core.context_processors import csrf from django.conf import settings from django.contrib.auth.decorators import login_required from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage #forms and models from file.forms import FileModelForm from file.models import TmpFile from theme.models import Tag #python import random @login_required def objects_list(request, Model, template, item_per_page=10): """ Return template with all objects of model Model Model - objects Model item_per_page - how many objects view in the one page """ list = Model.objects.all() paginator = Paginator(list, item_per_page) page = request.GET.get('page') try: objects = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. objects = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. objects = paginator.page(paginator._num_pages) return render_to_response(template, {'objects': objects}) @login_required def filtered_list(request, objects, template, item_per_page=10): """ Return template with objects in it with pagination item_per_page - how many objects view in the one page """ paginator = Paginator(objects, item_per_page) page = request.GET.get('page') try: objects = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. objects = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. objects = paginator.page(paginator._num_pages) return render_to_response(template, {'objects': objects}) @login_required def add_object(request, Form, template_string, redirect_string, choices={}): if request.POST: form = Form(request.POST) #set choices filled by ajax if 'city' in choices: form.fields['city'].choices = [(item.id, item.name) for item in choices['city'].objects.filter(country=request.POST['country'])] if 'tag' in choices: form.fields['tag'].choices = [(item.id, item.name) for item in choices['tag'].objects.all()] if form.is_valid(): form.save() return HttpResponseRedirect(redirect_string) else: form = Form() args = {} args.update(csrf(request)) args['languages'] = settings.LANGUAGES args['form'] = form return render_to_response(template_string, args) @login_required def add_object_with_file(request, Form, template, redirect_string, choices={}): """ Return form and FileForm and post it on the server. Create key which will be check tmp files If form is posted redirect on the page in redirect_string FileForm posts with ajax choices are ... """ #cheks if key already exist(when form wasn't validated) if request.POST.get('key'): key = request.POST['key'] else: key = random.getrandbits(128) #initial FileForm with key for checking if file connected to object file_form = FileModelForm(initial={'key': key}) if request.POST: form = Form(request.POST) #set choices filled by ajax if 'city' in choices: form.fields['city'].choices = [(item.id, item.name) for item in choices['city'].objects.filter(country=request.POST['country'])] if 'tag' in choices: form.fields['tag'].choices = [(item.id, item.name) for item in Tag.objects.all()] if form.is_valid(): form.save() return HttpResponseRedirect(redirect_string) else: form = Form(initial={'key':key}) args = {} args.update(csrf(request)) #languages uses in template args['languages'] = settings.LANGUAGES args['form'] = form args['file_form'] = file_form #list of files connected to this form args['files'] = TmpFile.objects.filter(key=key) return render_to_response(template, args)