def index(request): if not request.user.is_authenticated(): return HttpResponse('not authorized', status=401) sort = request.GET.get('sort') if sort and sort in sort_choices: images = Image.objects(is_25p=0,active=1,quality=1,repeated=0).exclude('face_info').order_by(sort) else: images = Image.objects(is_25p=0,active=1,quality=1,repeated=0).exclude('face_info') # search and filter search_str = request.GET.get('search') search_str = unquote(search_str) if search_str else search_str if search_str: search_params_list = re.split('; |, | |,|\n', search_str) images = images(tags__in=search_params_list) filter_str = request.GET.get('filter') filter_str = unquote(filter_str) if filter_str else filter_str try: json_obj = json.loads(open(os.path.dirname(__file__) + '/tags.json').read()) json_tree = objectpath.Tree(json_obj) except: raise if filter_str: filter_params_list = re.split('; |, | |,|\n', filter_str) for filter_param in filter_params_list: try: node = list(json_tree.execute('$..options[@.id is"' + filter_param + '"]'))[0] except: print 'error finding ' + filter_param + ' in tags.json file' continue key_value = node['query'].split('=') mapping = {} mapping[str(key_value[0])] = ast.literal_eval(key_value[1]) images = images(**mapping) response = json.loads('{}') response['total'] = images.count() limit = request.GET.get('limit') limit = limit if limit else images_per_page paginator = Paginator(images, limit) page = request.GET.get('page') try: images = paginator.page(page) except PageNotAnInteger: images = paginator.page(1) except EmptyPage: images = paginator.page(paginator.num_pages) # get account voting infomation response['images_list'] = json.loads(images.object_list.to_json()) for image in response['images_list']: try: image['user_vote'] = UserVote.objects.get(username=request.user.username, image_id=int(image['_id'])).vote except: image['user_vote'] = 0 return HttpResponse(json.dumps(response), content_type='application/json')