Django-Haystack: Как получить доступ к предложениям по орфографии на шаблоне?
-
02-10-2019 - |
Вопрос
Я пытаюсь Джанго-Хейштак с 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