Django-Haystack не возвращает результатов в форме поиска

Я использую 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 %}

Что еще я могу попробовать?

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 %}

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

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

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

Другие вопросы по тегам