70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
from django.shortcuts import render_to_response
|
|
from django.template import RequestContext
|
|
from django.utils.translation import ugettext as _
|
|
from django.contrib import messages
|
|
from django.conf import settings
|
|
|
|
from dynamic_search.api import perform_search
|
|
from dynamic_search.forms import SearchForm
|
|
from dynamic_search.conf.settings import SHOW_OBJECT_TYPE
|
|
|
|
|
|
def results(request, form=None):
|
|
query_string = ''
|
|
context = {}
|
|
|
|
if ('q' in request.GET) and request.GET['q'].strip():
|
|
query_string = request.GET['q']
|
|
try:
|
|
model_list, flat_list, shown_result_count, total_result_count, elapsed_time = perform_search(query_string)
|
|
if shown_result_count != total_result_count:
|
|
title = _(u'results with: %(query_string)s (showing only %(shown_result_count)s out of %(total_result_count)s)') % {
|
|
'query_string': query_string, 'shown_result_count': shown_result_count,
|
|
'total_result_count': total_result_count}
|
|
else:
|
|
title = _(u'results with: %s') % query_string
|
|
context.update({
|
|
'found_entries': model_list,
|
|
'object_list': flat_list,
|
|
'title': title,
|
|
'time_delta': elapsed_time,
|
|
})
|
|
|
|
except Exception, e:
|
|
if settings.DEBUG:
|
|
raise
|
|
elif request.user.is_staff or request.user.is_superuser:
|
|
messages.error(request, _(u'Search error: %s') % e)
|
|
else:
|
|
context.update({
|
|
'found_entries': [],
|
|
'object_list': [],
|
|
'title': _(u'results'),
|
|
})
|
|
|
|
context.update({
|
|
'query_string': query_string,
|
|
'form': form,
|
|
'form_title': _(u'Search'),
|
|
'hide_header': True,
|
|
'form_hide_required_text': True,
|
|
'hide_links': True,
|
|
})
|
|
|
|
if SHOW_OBJECT_TYPE:
|
|
context.update({'extra_columns':
|
|
[{'name': _(u'type'), 'attribute': lambda x: x._meta.verbose_name[0].upper() + x._meta.verbose_name[1:]}]})
|
|
|
|
return render_to_response('search_results.html', context,
|
|
context_instance=RequestContext(request))
|
|
|
|
|
|
def search(request):
|
|
if ('q' in request.GET) and request.GET['q'].strip():
|
|
query_string = request.GET['q']
|
|
form = SearchForm(initial={'q': query_string})
|
|
return results(request, form=form)
|
|
else:
|
|
form = SearchForm()
|
|
return results(request, form=form)
|