X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/55a07da1814663143cc32628edad0b4f4edb752d..43595c8f3220d11f47554e9755f5b54e283f635e:/contrib/sobol/models.py?ds=sidebyside diff --git a/contrib/sobol/models.py b/contrib/sobol/models.py index 7e11882..e4e4202 100644 --- a/contrib/sobol/models.py +++ b/contrib/sobol/models.py @@ -2,7 +2,7 @@ from django.conf.urls.defaults import patterns, url from django.contrib import messages from django.core.exceptions import ValidationError from django.db import models -from django.http import HttpResponseRedirect, Http404 +from django.http import HttpResponseRedirect, Http404, HttpResponse from django.utils import simplejson as json from django.utils.datastructures import SortedDict from philo.contrib.sobol import registry @@ -63,7 +63,7 @@ class Search(models.Model): self._favored_results = [] for value, subresults in grouped_results.items(): - cost = error * sum([(value - result.weight)**2 for result in results]) + cost = error * sum([(value - result.weight)**2 for result in self._favored_results]) if value > cost: self._favored_results += subresults else: @@ -130,13 +130,13 @@ class Click(models.Model): class SearchView(MultiView): results_page = models.ForeignKey(Page, related_name='search_results_related') searches = SlugMultipleChoiceField(choices=registry.iterchoices()) - enable_ajax_api = models.BooleanField("Enable AJAX API", default=True) + enable_ajax_api = models.BooleanField("Enable AJAX API", default=True, help_text="Search results will be available only by AJAX, not as template variables.") placeholder_text = models.CharField(max_length=75, default="Search") search_form = SearchForm def __unicode__(self): - return u"%s (%s)" % (self.placeholder_text, u", ".join([display for slug, display in registry.iterchoices()])) + return u"%s (%s)" % (self.placeholder_text, u", ".join([display for slug, display in registry.iterchoices() if slug in self.searches])) def get_reverse_params(self, obj): raise ViewCanNotProvideSubpath @@ -148,7 +148,7 @@ class SearchView(MultiView): ) if self.enable_ajax_api: urlpatterns += patterns('', - url(r'^(?P[\w-]+)', self.ajax_api_view, name='ajax_api_view') + url(r'^(?P[\w-]+)$', self.ajax_api_view, name='ajax_api_view') ) return urlpatterns @@ -196,6 +196,10 @@ class SearchView(MultiView): context.update({ 'searches': search_instances }) + else: + context.update({ + 'searches': [{'verbose_name': verbose_name, 'url': self.reverse('ajax_api_view', kwargs={'slug': slug}, node=request.node)} for slug, verbose_name in registry.iterchoices() if slug in self.searches] + }) else: form = SearchForm() @@ -214,8 +218,7 @@ class SearchView(MultiView): raise Http404 search_instance = self.get_search_instance(slug, search_string) - response = json.dumps({ - 'results': search_instance.results, - 'template': search_instance.get_template() - }) + response = HttpResponse(json.dumps({ + 'results': [result.get_context() for result in search_instance.results], + })) return response \ No newline at end of file