def category(request, slug, filter): category = slug and get_object_or_404(Category, slug=slug) if 'genre' in request.GET: genre = request.GET.get('genre', '*') try: request.session['filter/genre'] = Genre.objects.get(pk=int(genre)) except: request.session['filter/genre'] = None return redirect(request.META['PATH_INFO']) if 'p' in request.GET: try: page = int(request.GET['p']) except: return redirect(request.META['PATH_INFO']) else: page = 1 genres = category.list_genres() if category else Genre.objects.all()[:] genre = request.session.get('filter/genre') if genre and (genre not in genres): genre = None # TODO: resolve me! genres = genres[:15] auto_filter = False if filter else True filter = (filter, dict(CATALOG_FILTERS).get(filter)) if filter else CATALOG_FILTERS[0] featured_games = FeaturedGame.get(category, request) # if category: # featured_games = FeaturedGame.get(category) # else: # featured_games = CatalogBanner.get() if category: objects = Item.list_by_category(category, genre) else: objects = Item.list_all(genre) q = request.GET.get('q') if q: objects = quick_game_finder(objects, q) else: def get_objects(*args, **kwargs): filter = kwargs.get('filter') if category or not request.user.is_authenticated(): qs = objects.order_by(*args) if filter: qs = qs.filter(filter) return qs else: own_consoles = request.user.get_profile().get_owned_systems() o1 = objects.filter(category__in=own_consoles).order_by(*args) if filter: o1 = o1.filter(filter) o2 = objects.exclude(category__in=own_consoles).order_by(*args) if filter: o2 = o2.filter(filter) return list(o1) + list(o2) f = filter and filter[0] if f == 'best-sellers': date_x = datetime.now() - timedelta(60) filter = Q(release_date__lte=datetime.now()) & Q(release_date__gte=date_x) & Q(sold_amount__gt=0) objects = get_objects('-sold_amount', '-release_date', 'id', filter=filter) elif f == 'top-rentals': date_x = datetime.now() - timedelta(60) filter = Q(rent_flag=True) & Q(release_date__lte=datetime.now()) & Q(release_date__gte=date_x) & Q(rent_amount__gt=0) objects = get_objects('-rent_amount', '-release_date', 'id', filter=filter) elif f == 'top-trades': # date_x = datetime.now() - timedelta(60) # filter = Q(trade_flag=True) & Q(release_date__lte=datetime.now()) & Q(release_date__gte=date_x) & Q(trade_amount__gt=0) filter = Q(trade_flag=True) & Q(release_date__lte=datetime.now()) & Q(trade_amount__gt=0) objects = get_objects('-trade_amount', '-release_date', 'id', filter=filter) elif f == 'new-releases': date_x = datetime.now() - timedelta(60) objects = objects.filter(release_date__gt=date_x, release_date__lte=datetime.now()).order_by('-release_date') if not category and request.user.is_authenticated(): objects = objects.filter(release_date__gt=date_x, release_date__lte=datetime.now()) own_consoles = request.user.get_profile().get_owned_systems() o1 = objects.filter(category__in=own_consoles) o2 = objects.exclude(category__in=own_consoles) objects = list(o1) + list(o2) else: seed = request.session.get('catalog-random-seed', random.random()) if page == 1: seed = random.random() request.session['catalog-random-seed'] = seed request.session.save() random.seed(seed) if f == 'coming-soon': # date_x = datetime.now() + timedelta(30) # objects = objects.filter(Q(release_date__gt=datetime.now()) & Q(release_date__lte=date_x)) objects = objects.filter(release_date__gt=datetime.now()) if category or not request.user.is_authenticated(): objects = list(objects) else: own_consoles = request.user.get_profile().get_owned_systems().order_by('-release_date', 'id') o1 = list(objects.filter(category__in=own_consoles)) o2 = list(objects.exclude(category__in=own_consoles)) # random.shuffle(o1) # random.shuffle(o2) objects = o1 + o2 paginator = Paginator(objects, settings.CATALOG_ITEMS_AMOUNT, 5) try: current_page = paginator.page(page) except Exception, e: debug(e) raise Http404()