Update search views to CBV. Remove unused template.

This commit is contained in:
Roberto Rosario
2015-08-13 22:31:22 -04:00
parent 5ae033eb77
commit c3fa15bbd1
4 changed files with 72 additions and 108 deletions

View File

@@ -4,15 +4,6 @@ from django import forms
from django.utils.translation import ugettext_lazy as _
class SearchForm(forms.Form):
q = forms.CharField(max_length=128, label=_('Search terms'))
source = forms.CharField(
max_length=32,
required=False,
widget=forms.widgets.HiddenInput()
)
class AdvancedSearchForm(forms.Form):
def __init__(self, *args, **kwargs):
self.search_model = kwargs.pop('search_model')
@@ -23,3 +14,7 @@ class AdvancedSearchForm(forms.Form):
label=label,
required=False
)
class SearchForm(forms.Form):
q = forms.CharField(max_length=128, label=_('Search terms'), required=False)

View File

@@ -1,21 +0,0 @@
{% extends 'appearance/base.html' %}
{% load i18n %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
{% if form %}
{% with 'get' as submit_method %}
{% with form_title as title %}
{% include 'appearance/generic_form_subtemplate.html' %}
{% endwith %}
{% endwith %}
{% endif %}
{% if query_string %}
{% include 'appearance/generic_list_subtemplate.html' %}
{% endif %}
{% if not form and not query_string %}
{% include 'appearance/generic_list_subtemplate.html' %}
{% endif %}
{% endblock %}

View File

@@ -5,13 +5,14 @@ from django.conf.urls import patterns, url
from .api_views import (
APIRecentSearchListView, APIRecentSearchView, APISearchView
)
from .views import AdvancedSearchView, ResultsView, SearchView
urlpatterns = patterns(
'dynamic_search.views',
url(r'^$', 'search', name='search'),
url(r'^advanced/$', 'search', {'advanced': True}, 'search_advanced'),
url(r'^$', SearchView.as_view(), name='search'),
url(r'^advanced/$', AdvancedSearchView.as_view(), name='search_advanced'),
url(r'^again/$', 'search_again', name='search_again'),
url(r'^results/$', 'results', name='results'),
url(r'^results/$', ResultsView.as_view(), name='results'),
)
api_urls = patterns(

View File

@@ -10,6 +10,8 @@ from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _
from common.generics import SimpleView, SingleObjectListView
from .classes import SearchModel
from .forms import SearchForm, AdvancedSearchForm
from .settings import setting_limit, setting_show_object_type
@@ -17,82 +19,69 @@ from .settings import setting_limit, setting_show_object_type
logger = logging.getLogger(__name__)
def results(request, extra_context=None):
document_search = SearchModel.get('documents.Document')
context = {
'query_string': request.GET,
'hide_links': True,
'search_results_limit': setting_limit.value,
}
if request.GET:
# Only do search if there is user input, otherwise just render
# the template with the extra_context
queryset, ids, timedelta = document_search.search(request.GET, request.user)
# Update the context with the search results
context.update({
'object_list': queryset,
'time_delta': timedelta,
'title': _('Results'),
})
if extra_context:
context.update(extra_context)
if setting_show_object_type.value:
context.update({
'extra_columns': [
{
'name': _('Type'),
'attribute': lambda x: x._meta.verbose_name[0].upper() + x._meta.verbose_name[1:]
}
]
})
return render_to_response(
'dynamic_search/search_results.html', context,
context_instance=RequestContext(request)
)
def search(request, advanced=False):
document_search = SearchModel.get('documents.Document')
if advanced:
form = AdvancedSearchForm(
data=request.GET, search_model=document_search
)
return render_to_response(
'appearance/generic_form.html',
{
'form': form,
'title': _('Advanced search'),
'form_action': reverse('search:results'),
'submit_method': 'GET',
'search_results_limit': setting_limit.value,
'submit_label': _('Search'),
'submit_icon': 'fa fa-search',
}, context_instance=RequestContext(request)
)
else:
extra_context = {
'submit_label': _('Search'),
'submit_icon': 'fa fa-search',
'form_title': _('Search'),
'form_hide_required_text': True,
class ResultsView(SingleObjectListView):
def get_extra_context(self):
context = {
'hide_links': True,
'search_results_limit': setting_limit.value,
'title': _('Search results'),
}
if ('q' in request.GET) and request.GET['q'].strip():
query_string = request.GET['q']
form = SearchForm(initial={'q': query_string})
extra_context.update({'form': form})
return results(request, extra_context=extra_context)
if setting_show_object_type.value:
context.update({
'extra_columns': [
{
'name': _('Type'),
'attribute': lambda x: x._meta.verbose_name[0].upper() + x._meta.verbose_name[1:]
}
]
})
return context
def get_queryset(self):
document_search = SearchModel.get('documents.Document')
if self.request.GET:
# Only do search if there is user input, otherwise just render
# the template with the extra_context
queryset, ids, timedelta = document_search.search(self.request.GET, self.request.user)
return queryset
class SearchView(SimpleView):
template_name = 'appearance/generic_form.html'
title = _('Search')
def get_form(self):
if ('q' in self.request.GET) and self.request.GET['q'].strip():
query_string = self.request.GET['q']
return SearchForm(initial={'q': query_string})
else:
form = SearchForm()
extra_context.update({'form': form})
return results(request, extra_context=extra_context)
return SearchForm()
def get_extra_context(self):
return {
'form': self.get_form(),
'form_action': reverse('search:results'),
'submit_icon': 'fa fa-search',
'submit_label': _('Search'),
'submit_method': 'GET',
'title': self.title,
}
class AdvancedSearchView(SearchView):
title = _('Advanced search')
def get_form(self):
document_search = SearchModel.get('documents.Document')
return AdvancedSearchForm(
data=self.request.GET, search_model=document_search
)
def search_again(request):
@@ -100,5 +89,5 @@ def search_again(request):
request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))
).query
return HttpResponseRedirect(
'%s?%s' % (reverse('search:search_advanced'), query)
'{}?{}'.format(reverse('search:search_advanced'), query)
)