Refactor and simply recent search functionality
This commit is contained in:
@@ -15,21 +15,6 @@ from dynamic_search.conf.settings import RECENT_COUNT
|
||||
class RecentSearchManager(Manager):
|
||||
def add_query_for_user(self, search_view):#user, url, hits):
|
||||
query_dict = parse_qs(unquote_plus(smart_str(urlparse(search_view.request.get_full_path()).query)))
|
||||
print 'query_dict', query_dict
|
||||
print 'serial', dumps(query_dict)
|
||||
|
||||
#parsed_query = urlparse.parse_qs(query)
|
||||
#for key, value in parsed_query.items():
|
||||
# parsed_query[key] = ' '.join(value)#
|
||||
|
||||
#if 'q=' in query:
|
||||
# # Is a simple query
|
||||
# if not parsed_query.get('q'):
|
||||
# # Don't store empty simple searches
|
||||
# return
|
||||
# else:
|
||||
# # Cleanup query string and only store the q parameter
|
||||
# parsed_query = {'q': parsed_query['q']}
|
||||
|
||||
if query_dict and not isinstance(search_view.request.user, AnonymousUser):
|
||||
# If the URL query has at least one variable with a value
|
||||
@@ -40,6 +25,9 @@ class RecentSearchManager(Manager):
|
||||
for recent_to_delete in to_delete:
|
||||
recent_to_delete.delete()
|
||||
|
||||
def get_for_user(self, user):
|
||||
return [entry for entry in self.model.objects.filter(user=user) if entry.get_query()]
|
||||
|
||||
|
||||
class IndexableObjectManager(Manager):
|
||||
def get_indexables(self, datetime=None):
|
||||
|
||||
@@ -13,6 +13,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.contenttypes import generic
|
||||
from django.utils.simplejson import loads
|
||||
from django.utils.http import urlencode
|
||||
|
||||
from .managers import RecentSearchManager, IndexableObjectManager
|
||||
from .api import registered_search_dict
|
||||
@@ -30,28 +31,31 @@ class RecentSearch(models.Model):
|
||||
objects = RecentSearchManager()
|
||||
|
||||
def __unicode__(self):
|
||||
return self.form_string()
|
||||
|
||||
def form_string(self):
|
||||
query = self.get_query()
|
||||
if self.is_advanced():
|
||||
return u'%s (%s)' % (self.get_query(), self.hits)
|
||||
else:
|
||||
return u'%s (%s)' % (self.get_query().get('q'), self.hits)
|
||||
return u'%s (%s)' % (u' '.join(self.get_query().get('q')), self.hits)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.datetime_created = datetime.datetime.now()
|
||||
super(RecentSearch, self).save(*args, **kwargs)
|
||||
|
||||
#def readable_query(self):
|
||||
# return self.
|
||||
|
||||
#def url(self):
|
||||
# view = 'results' if self.is_advanced() else 'search'
|
||||
# return '%s?%s' % (reverse(view), self.query)
|
||||
|
||||
def get_query(self):
|
||||
return loads(self.query)
|
||||
try:
|
||||
return loads(self.query)
|
||||
except ValueError:
|
||||
return {}
|
||||
|
||||
def is_advanced(self):
|
||||
return 'q' not in self.get_query()
|
||||
|
||||
def get_absolute_url(self):
|
||||
return '?'.join([reverse('search'), urlencode(self.get_query(), doseq=True)])
|
||||
|
||||
class Meta:
|
||||
ordering = ('-datetime_created',)
|
||||
verbose_name = _(u'recent search')
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.template import Library
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from dynamic_search.forms import SearchForm
|
||||
from dynamic_search.models import RecentSearch
|
||||
from dynamic_search.conf.settings import RECENT_COUNT
|
||||
from ..forms import SearchForm
|
||||
from ..models import RecentSearch
|
||||
from ..conf.settings import RECENT_COUNT
|
||||
|
||||
register = Library()
|
||||
|
||||
@@ -25,18 +27,21 @@ def search_form(context):
|
||||
|
||||
@register.inclusion_tag('generic_subtemplate.html', takes_context=True)
|
||||
def recent_searches_template(context):
|
||||
recent_searches = RecentSearch.objects.filter(user=context['user'])
|
||||
context.update({
|
||||
'request': context['request'],
|
||||
'STATIC_URL': context['STATIC_URL'],
|
||||
'side_bar': True,
|
||||
'title': _(u'recent searches (maximum of %d)') % RECENT_COUNT,
|
||||
'paragraphs': [
|
||||
u'<a href="%(url)s"><span class="famfam active famfam-%(icon)s"></span>%(text)s</a>' % {
|
||||
'text': rs,
|
||||
'url': reverse('search'),
|
||||
'icon': 'zoom_in' if rs.is_advanced() else 'zoom',
|
||||
} for rs in recent_searches
|
||||
]
|
||||
})
|
||||
return context
|
||||
try:
|
||||
recent_searches = RecentSearch.objects.get_for_user(user=context['user'])
|
||||
context.update({
|
||||
'request': context['request'],
|
||||
'STATIC_URL': context['STATIC_URL'],
|
||||
'side_bar': True,
|
||||
'title': _(u'recent searches (maximum of %d)') % RECENT_COUNT,
|
||||
'paragraphs': [
|
||||
u'<a href="%(url)s"><span class="famfam active famfam-%(icon)s"></span>%(text)s</a>' % {
|
||||
'text': recent_search,
|
||||
'url': recent_search.get_absolute_url(),
|
||||
'icon': 'zoom_in' if recent_search.is_advanced() else 'zoom',
|
||||
} for recent_search in recent_searches
|
||||
]
|
||||
})
|
||||
return context
|
||||
except Exception, e:
|
||||
print 'EEEEEEEEEEEE', e
|
||||
|
||||
Reference in New Issue
Block a user