Настроить представление с помощью Whoosh

Я использую Haystack и Whoosh для создания поисковой системы сайта. Whoosh отлично работает в моем случае, но мне нужно показать дополнительную информацию из моего представления, зависит от того, что нашел поиск.

В моем представлении Django я использую что-то вроде этого, где фиктивная информация - это информация:

dummy = "dummy"
 return render_to_response('images/ib_large_image.html', {'dummy': dummy},
 context_instance=RequestContext(request))

Поэтому, в основном, я хочу персонализировать представление поиска, чтобы показать свою переменную в шаблоне поиска.

Вот некоторая конфигурация:

настройки:

HAYSTACK_CONNECTIONS = {
 'default': {
 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
 'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
 'DEFAULT_OPERATOR': 'AND',
 'SITECONF': 'search_sites',
 'SEARCH_RESULTS_PER_PAGE': 20
 },
 }

search_sites.py:

import haystack
 haystack.autodiscover()

search> indexes> imageboard> image_text.txt:

{{ object.name }}
 {{ object.description }}

imageboard> search_indexes.py:

import datetime
 from haystack import indexes
 from imageboard.models import Image

 class ImageIndex(indexes.SearchIndex, indexes.Indexable):
 text = indexes.CharField(document=True, use_template=True)

 def get_model(self):
 return Image

 def index_queryset(self):
 """Used when the entire index for model is updated."""
 return self.get_model().objects.filter(uploaded_date__lte=datetime.datetime.now())

imageboard> urls.py:

urlpatterns = patterns('imageboard.views',
 (r'^search/', include('haystack.urls')),
 )

Я настроил свое мнение так, но это не работает:

imageboard> views.py:

from haystack.views import SearchView
 def search(request):
 return SearchView(template='search.html')(request)

Есть идеи??

1 ответ

Я предлагаю вам взглянуть на стог сена " StoredFields ". Они хранят любую информацию, доступную вашему представлению результатов поиска в индексе поиска. Дополнительным преимуществом является то, что просмотры результатов поиска никогда не должны попадать в БД, чтобы отображать их содержимое. Кроме того, вы можете предварительно сделать вывод для каждого результата поиска в сохраненное поле

class ImageIndex(indexes.SearchIndex, indexes.Indexable):
 rendered = CharField(use_template=True, indexed=False)

Затем внутри шаблона с именем search/indexes/myapp/image_rendered.txt:

<h2>{{ object.title }}</h2>

<p>{{ object.content }}</p>

И, наконец, в search/search.html:

...

{% for result in page.object_list %}
 <div>
 {{ result.rendered|safe }}
 </div>
{% endfor %}

licensed under cc by-sa 3.0 with attribution.