django-haystack: как да получите достъп до предложенията за правопис в шаблона?

Опитвам django-haystack със Solr и HAYSTACK_INCLUDE_SPELLING = True.

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

Редактиране: друг въпрос: Може ли предложението за правопис да намери думи от базата данни? Например, използвайки модела по подразбиране Note от документа за купа сено и по подразбиране SearchView, няма предложения за правопис, когато търся думата "Lorm", когато базата данни съдържа бележка, наречена "Lorem ipsum". нормално ли е

Благодаря :-)


person user176455    schedule 01.05.2010    source източник


Отговори (3)


Ако имате зададена заявка за търсене в шаблона, можете да направите:

{{ sqs.spelling_suggestion }}

Вижте: http://docs.haystacksearch.org/dev/searchqueryset_api.html#spelling-suggestion

за повече информация.

За да може haystack да намери предложенията за правопис, шаблонът за търсене трябва да включва полето, което търсите. Така че, ако шаблонът за търсене включва {{ object.title }}, трябва да вземете предложението за правопис.

Може би сте забравили да направите

python manage.py update_index

след като сте добавили бележката lorem.

person Hassan    schedule 02.05.2010
comment
Забравих да актуализирам индексите. Вече работи, благодаря. :-) - person user176455; 02.05.2010
comment
Уверете се, че нямате допълнително филтриране в sqs. sqs.filter(permission=True), например ще върне резултати, които не сте очаквали. Трябва да се използва само заявката, в която е желано предложение. Например: query = request.GET.get('q', '') / sqs = SearchQuerySet().filter(content=AutoQuery(query)) / предложение = sqs.spelling_suggestion() / - person Forethinker; 01.04.2017

{{ suggestion }} трябва да е достатъчно, ако използвате SearchView по подразбиране.

Вижте:

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

...за да видите какво е налично в контекста на шаблона.

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

person Dana Woodman    schedule 21.03.2011

Открих, че горепосочените решения работят само ако разширяваме haystack.views.SearchView. Новите генерични изгледи, базирани на SearchView, т.е. 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

person rks    schedule 27.08.2019