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
)
if self.enable_ajax_api:
urlpatterns += patterns('',
- url(r'^(?P<slug>[\w-]+)', self.ajax_api_view, name='ajax_api_view')
+ url(r'^(?P<slug>[\w-]+)$', self.ajax_api_view, name='ajax_api_view')
)
return urlpatterns
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()]
+ })
else:
form = SearchForm()
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
def __getitem__(self, key):
return self._registry[key]
+
+ def __iter__(self):
+ return self._registry.__iter__()
registry = SearchRegistry()
return self.search.get_result_title(self.result)
def get_url(self):
- return self.search.get_result_querydict(self.result).urlencode()
+ return "?%s" % self.search.get_result_querydict(self.result).urlencode()
def get_template(self):
return self.search.get_result_template(self.result)
def get_extra_context(self):
return self.search.get_result_extra_context(self.result)
- def render(self):
- t = self.get_template()
- c = Context(self.get_extra_context())
- c.update({
+ def get_context(self):
+ context = self.get_extra_context()
+ context.update({
'title': self.get_title(),
'url': self.get_url()
})
+ return context
+
+ def render(self):
+ t = self.get_template()
+ c = Context(self.get_context())
return t.render(c)
def __unicode__(self):
self._result_template = Template(DEFAULT_RESULT_TEMPLATE_STRING)
return self._result_template
- def get_ajax_result_template(self, result):
- return getattr(self, 'ajax_result_template', DEFAULT_RESULT_TEMPLATE_STRING)
-
def get_result_extra_context(self, result):
return {}