def filter_items(request, c, items): if 'sort' in request.GET: request.session['catalog_sort'] = request.GET['sort'] if 'catalog_sort' in request.session: items = items.order_by(request.session['catalog_sort']) c['sort'] = request.session['catalog_sort'] else: items = items.order_by('name') c['sort'] = 'name' if 'brand' in request.GET: request.session['catalog_brand'] = request.GET['brand'] if 'catalog_brand' in request.session and request.session['catalog_brand']: if Brand.get_by_slug(request.session['catalog_brand']) in c['brands']: items = items.filter(brand=Brand.get_by_slug(request.session['catalog_brand'])) c['brand'] = request.session['catalog_brand'] else: del request.session['catalog_brand'] if 'from_price' in request.GET: request.session['catalog_from_price'] = request.GET['from_price'] if 'catalog_from_price' in request.session and request.session['catalog_from_price']: items = items.filter(price__gte=int(request.session['catalog_from_price'])) c['from_price'] = request.session['catalog_from_price'] if 'to_price' in request.GET: request.session['catalog_to_price'] = request.GET['to_price'] if 'catalog_to_price' in request.session and request.session['catalog_to_price']: items = items.filter(price__lte=int(request.session['catalog_to_price'])) c['to_price'] = request.session['catalog_to_price'] if 'season_change' in request.GET: request.session['catalog_season'] = request.GET.getlist('season', []) if 'catalog_season' in request.session and request.session['catalog_season']: items = items.filter(season__in=request.session['catalog_season']) c['season'] = request.session['catalog_season'] if 'novelty_sale' in request.GET: request.session['catalog_for_sale'] = request.GET.get('for_sale', False) request.session['catalog_novelty'] = request.GET.get('novelty', False) if 'catalog_for_sale' in request.session and request.session['catalog_for_sale']: items = items.exclude(price_old__exact=None) c['for_sale'] = True if 'catalog_novelty' in request.session and request.session['catalog_novelty']: items = items.filter(date__gte=(datetime.datetime.now() - datetime.timedelta(days=7))) c['novelty'] = True if 'color' in request.GET: request.session['catalog_color'] = request.GET['color'] if 'catalog_color' in request.session and request.session['catalog_color']: if Color.objects.get(id=int(request.session['catalog_color'])) in c['colors']: items = items.filter(color=request.session['catalog_color']) c['color'] = int(request.session['catalog_color']) else: del request.session['catalog_color'] if 'material' in request.GET: request.session['catalog_material'] = request.GET['material'] if 'catalog_material' in request.session and request.session['catalog_material']: if Material.objects.get(id=int(request.session['catalog_material'])) in c['materials']: items = items.filter(material=request.session['catalog_material']) c['material'] = int(request.session['catalog_material']) else: del request.session['catalog_material'] if 'count' in request.GET: request.session['catalog_count'] = request.GET['count'] if 'catalog_count' in request.session: c['count'] = request.session['catalog_count'] else: request.session['catalog_count'] = 10 c['count'] = 10 paginator = Paginator(items, request.session['catalog_count']) page = int(request.GET.get('page', '1')) try: items = paginator.page(page) except PageNotAnInteger: page = 1 items = paginator.page(page) except EmptyPage: page = paginator.num_pages items = paginator.page(page) c['page'] = page c['page_range'] = paginator.page_range if len(c['page_range']) > 1: c['need_pagination'] = True c['items'] = items return c
def brand(request, slug): c = get_common_context(request) c['brand'] = Brand.get_by_slug(slug) items = Item.objects.filter(brand=c['brand']) return render_to_response('brand.html', filter_items(request, c, items), context_instance=RequestContext(request))