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

from haystack.query import SearchQuerySet
sqs = SearchQuerySet().all()
sqs.count()
sqs[0].text

На моей странице search.html есть следующий раздел (скопирован прямо из документации):

{% for result in page.object_list %}
    <p>
        <a href="{{ result.object.url }}">{{ result.object }}</a>
    </p>
{% empty %}
    <p>No results found.</p>
{% endfor %}

Что еще можно попробовать?

1
Sushil 16 Апр 2016 в 09:05

2 ответа

Лучший ответ

Что ж, я понятия не имею, что происходит, но хотя в примерах работает page.object_list, в моем реальном проекте мне нужно было удалить префикс page. Больно разобраться.

Теперь это работает:

{% for result in object_list %}
  <p>
    <a href="{{ result.object.url }}">{{ result.object }}</a>
  </p>
{% empty %}
  <p>No results found.</p>
{% endfor %}
1
Sushil 16 Апр 2016 в 08:17

Как новичок, пробующий django-haystack и whoosh, и следуя фрагментам различных руководств по документации haystack, у меня была та же проблема, что и у вас: при выполнении EmptySearch () результатов не было, хотя я переопределил SearchForm, чтобы показать все.

def no_query_found(self):
    return self.searchqueryset.all()

Как вы говорите, удаление префикса «страница» в шаблоне search.html помогло и было хорошим временным решением. Однако это стало проблемой, когда пришло время разбивать результаты на страницы. Итак, осмотревшись, мы решили использовать префикс page_obj вместо page, и все работало так, как ожидалось. Кажется, проблема в том, что в haystack-tutorial предполагается, что объект страницы называется "page", а в некоторых версиях django он называется "page_obj"? Я уверен, что есть лучший ответ - я просто сообщаю о своих ограниченных результатах.

3
penguinorama 21 Авг 2016 в 15:19