Django-Haystack: Как получить доступ к предложениям по орфографии на шаблоне?

StackOverflow https://stackoverflow.com/questions/2750624

Вопрос

Я пытаюсь Джанго-Хейштак с Solr и HAYSTACK_INCLUDE_SPELLING = True.

Как получить доступ к предложениям по написанию на шаблоне (сгенерированным по умолчанию SearchView) ?

РЕДАКТИРОВАТЬ: Еще один вопрос: может ли предложение по написанию найти слова из базы данных? Например, использование дефолта Note модель из доктора сена и по умолчанию SearchView, когда я ищу слова «Лорм», не существует писателей, когда база данных содержит заметку, называемую «Lorem Ipsum». Это нормально?

Спасибо :-)

Это было полезно?

Решение

Если у вас есть поисковый запрос в шаблоне, вы можете сделать:

{{ sqs.spelling_suggestion }}

Смотреть на: http://docs.haystacksearch.org/dev/searchqueryset_api.html#spelling-suggestion

Больше подробностей.

Чтобы Хэндско -сток мог найти предложения по написанию, шаблон поиска должен включать в себя поле, которое вы ищете. Таким образом, если вы поиски включают {{object.title}}, вы должны поднять предложение по орфографии.

Может ты забыл сделать

python manage.py update_index

После того, как вы добавили ноту Lorem.

Другие советы

{{ suggestion }} должно быть достаточно, если вы используете по умолчанию SearchView.

Видеть:

https://github.com/toastdriven/django-haystack/blob/master/haystack/views.py#l118

... чтобы увидеть, что доступно в контексте шаблона.

Хасан прав, утверждая, что вы должны обновить/перестроить свой индекс и что вам нужны правильные поля в вашем шаблоне поиска.

Я обнаружил, что вышеупомянутые решения работают только в том случае, если мы расширяем haystack.views.SearchView. Анкет Новые общие представления на основе SearchView IE haystack.generic_views.SearchView Кажется, не добавляют suggestion Поле в контекст, и мы не сможем получить доступ к этой переменной контекста {{ suggestion }}.

Нам нужно будет вручную добавить его в контекст следующим образом:

from haystack.generic_views import SearchView

# Custom view.
class MySearchView(SearchView):

    template_name = 'search/search.html'
    queryset = SearchQuerySet().all()
    form_class = SearchForm  

    def get_context_data(self, *args, **kwargs):
        context = super(MySearchView, self).get_context_data(*args, **kwargs)

        # Add any additional context data we need to display in forms
        spell_suggestion = self.get_form().get_suggestion()
        context['spell_suggestion'] = spell_suggestion

        return context

Добавьте представление в urls.py

urlpatterns = [
    path('search/', MySearchView.as_view(), name='haystack_search'),

А затем в search.html получить доступ к контекстной переменной как {{ spell_suggestion }}

Надеюсь это поможет :)

Справка: https://django-haystack.readthedocs.io/en/v2.4.1/views_and_forms.html#upgrading

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top