From 946e4fcf509a9511106b2019a3cebdc1d25489d5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 15 Nov 2011 06:34:59 -0400 Subject: [PATCH] Handle percent encoded unicode query strings in search URL --- apps/dynamic_search/managers.py | 2 +- apps/dynamic_search/models.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/dynamic_search/managers.py b/apps/dynamic_search/managers.py index 2b2a5ca313..5df299ac2c 100644 --- a/apps/dynamic_search/managers.py +++ b/apps/dynamic_search/managers.py @@ -10,7 +10,7 @@ class RecentSearchManager(models.Manager): def add_query_for_user(self, user, query, hits): parsed_query = urlparse.parse_qs(query) for key, value in parsed_query.items(): - parsed_query[key] = u' '.join(value) + parsed_query[key] = ' '.join(value) if 'q=' in query: # Is a simple query diff --git a/apps/dynamic_search/models.py b/apps/dynamic_search/models.py index 17ccfa43d9..acf8f4ed97 100644 --- a/apps/dynamic_search/models.py +++ b/apps/dynamic_search/models.py @@ -1,4 +1,5 @@ import urlparse +import urllib from datetime import datetime @@ -6,6 +7,7 @@ from django.db import models from django.utils.translation import ugettext as _ from django.contrib.auth.models import User from django.core.urlresolvers import reverse +from django.utils.encoding import smart_unicode, smart_str from dynamic_search.managers import RecentSearchManager from dynamic_search.api import registered_search_dict @@ -23,10 +25,10 @@ class RecentSearch(models.Model): objects = RecentSearchManager() def __unicode__(self): - query_dict = urlparse.parse_qs(self.query) + query_dict = urlparse.parse_qs(urllib.unquote_plus(smart_str(self.query))) if 'q' in query_dict: # Is a simple search - display_string = u' '.join(query_dict['q']) + display_string = smart_unicode(' '.join(query_dict['q'])) else: # Advanced search advanced_string = [] @@ -38,7 +40,7 @@ class RecentSearch(models.Model): # Find the field name title for model_field in model_entry.get('fields', [{}]): if model_field.get('name') == field_name: - advanced_string.append(u'%s: %s' % (model_field.get('title', model_field['name']), u' '.join(value))) + advanced_string.append(u'%s: %s' % (model_field.get('title', model_field['name']), smart_unicode(' '.join(value)))) display_string = u', '.join(advanced_string) return u'%s (%s)' % (display_string, self.hits)