Esempio n. 1
0
def search(request, template='dig/search_page.html', api=False):
    sqs, choices, constraints, querystr = _parse_facets(request.GET)
    sqs, sort_links, cur_sort = _apply_sorting(sqs, request.GET, querystr)

    # Pagination
    p = paginator.Paginator(sqs, 10)
    try:
        page = p.page(int(request.GET.get('p_', 1)))
    except (ValueError, paginator.InvalidPage, paginator.EmptyPage):
        page = p.page(min(1, p.num_pages))

    # Result summaries and highlighting
    documents = []
    for doc in page.object_list:
        if doc.highlighted:
            excerpt = mark_safe(u"... %s ..." % doc.highlighted['text'][0])
        else:
            excerpt = (getattr(doc, settings.BODY_FIELD['name']) or '')[0:200] + "..."
        documents.append((doc, excerpt))

    if api:
        dict_docs = []
        for d, excerpt in documents:
            doc = dict((n, unicode(getattr(d, n))) for n in settings.FACET_DISPLAY)
            doc['excerpt_'] = excerpt
            dict_docs.append(doc)
        for choice in choices:
            choice['field'] = {
                'name': choice['field']['name'],
                'display_name': choice['field']['display_name'],
            }
            if choice['type'] in ("min_max", "date"):
                print "REDO!!!!"
                choice['choices'] = zip(choice.pop('vals'), choice.pop('counts'))

        return utils.render_json(request, {
            'pagination': {
                'p_': page.number,
                'num_pages': page.paginator.num_pages,
                'num_results': page.paginator.count,
            },
            'documents': dict_docs,
            'choices': choices,
            'sorting': cur_sort,
            'constraints': constraints,
        })

    return utils.render_request(request, template, {
        'sqs': sqs,
        'choices': choices,
        'constraints': constraints,
        'querystr': querystr,
        'sort_links': sort_links,
        'cur_sort': cur_sort,
        'cur_sort_qstring': urllib.urlencode(cur_sort) if cur_sort else "",
        'documents': documents,
        'page': page,
        'total_count': Document.objects.all().count(),
    })
Esempio n. 2
0
def show_document(request, doc_pk, template='dig/document_page.html', api=False):
    doc = get_object_or_404(Document, pk=doc_pk)
    if api:
        return utils.render_json(request, { 'document': doc.to_dict() })

    return utils.render_request(request, template, {
        'doc': doc
    })
Esempio n. 3
0
def about(request):
    sqs, choices, constraints, querystr = _parse_facets(request.GET)
    return utils.render_request(request, "dig/about_page.html", {
        'page': {'paginator': {'count': Document.objects.all().count() }},
        'sqs': sqs,
        'choices': choices,
        'constraints': constraints,
        'querystr': querystr,
    })
Esempio n. 4
0
def api(request):
    return utils.render_request(request, "dig/api.html")