示例#1
0
def images_reg(request, page=1):

    form = imagefilterform_factory(request)(request.GET)
    if form.is_valid():

        lookup_args={}
        qs = Image.objects.filter(is_public=True).order_by('caption', '-date_added')
        for (key, value) in form.cleaned_data.items():
            if value:
                if value == 'all':
                    # ugly hack to get content type, should be fixed
                    model = getattr(Image.objects.get(pk=1), key).model

                    q_object = Q()
                    for value in model.objects.values('name'):
                        q_object = q_object | Q(**{'%s__name' % key: value['name']})
                    qs = qs.filter(q_object).distinct()
                else:
                    lookup_args.update({'%s__name' % key: value})

        qs = qs.filter(**lookup_args)

        # filter communications and archives
        if not request.user.is_staff:
            for value in Communications.objects.values('name'):
                qs = qs.exclude(communications__name=value['name'])
            for value in Archive.objects.values('name'):
                qs = qs.exclude(archives__name=value['name'])

        image_paginator = Paginator(qs, getattr(settings, 'PAGINATE_BY', 25))

        try:
            images = image_paginator.page(page)
        except (EmptyPage, InvalidPage):
            images = image_paginator.page(image_paginator.num_pages)
 
        " Initialize variables "
        in_leading_range = in_trailing_range = False
        pages_outside_leading_range = pages_outside_trailing_range = range(0)
 
        page = images

        if (page.paginator.num_pages <= LEADING_PAGE_RANGE_DISPLAYED):
            in_leading_range = in_trailing_range = True
            page_numbers = page.paginator.page_range
        elif (page.number <= LEADING_PAGE_RANGE):
            in_leading_range = True
            page_numbers = [n for n in range(1, LEADING_PAGE_RANGE_DISPLAYED + 1) if n > 0 and n <= page.paginator.num_pages]
            pages_outside_leading_range = [n + page.paginator.num_pages for n in range(0, -NUM_PAGES_OUTSIDE_RANGE, -1)]
        elif (page.number > page.paginator.num_pages - TRAILING_PAGE_RANGE):
            in_trailing_range = True
            page_numbers = [n for n in range(page.paginator.num_pages - TRAILING_PAGE_RANGE_DISPLAYED + 1, page.paginator.num_pages + 1) if n > 0 and n <= page.paginator.num_pages]
            pages_outside_trailing_range = [n + 1 for n in range(0, NUM_PAGES_OUTSIDE_RANGE)]
        else: 
            page_numbers = [n for n in range(page.number - ADJACENT_PAGES, page.number + ADJACENT_PAGES + 1) if n > 0 and n <= page.paginator.num_pages]
            pages_outside_leading_range = [n + page.paginator.num_pages for n in range(0, -NUM_PAGES_OUTSIDE_RANGE, -1)]
            pages_outside_trailing_range = [n + 1 for n in range(0, NUM_PAGES_OUTSIDE_RANGE)]
        context = {
            "page_numbers": page_numbers,
            "in_leading_range" : in_leading_range,
            "in_trailing_range" : in_trailing_range,
            "pages_outside_leading_range": pages_outside_leading_range,
            "pages_outside_trailing_range": pages_outside_trailing_range
        }

        context.update(
            {'images':images,
             'form':form,
             'query':request.GET.urlencode()})

        return render_to_response(
            'image_list.html',
            RequestContext(
                request,
                context))

    else:
        return HttpResponseBadRequest(form.errors)
示例#2
0
def image_front_reg(request, page=1):

    image_form = imagefilterform_factory(request)()

    return render_to_response('image_front.html', RequestContext(request, {'form':image_form,}))