django-haystack:如何访问模板上的拼写建议?

时间:2010-05-01 16:09:30

标签: python django solr django-haystack

我正在尝试与Solr和HAYSTACK_INCLUDE_SPELLING = True进行django-haystack。

如何访问模板上的拼写建议(由默认SearchView生成)?

编辑:另一个问题:拼写建议可以从数据库中找到单词吗?例如,使用haystack doc中的默认Note模型和默认的SearchView,当我搜索单词“Lorm”时,当数据库包含一个名为“Lorem ipsum”的注释时,没有拼写建议。这是正常的吗?

谢谢: - )

3 个答案:

答案 0 :(得分:5)

如果您在模板中设置了搜索查询,则可以执行以下操作:

{{ sqs.spelling_suggestion }}

看看:     http://docs.haystacksearch.org/dev/searchqueryset_api.html#spelling-suggestion

了解更多详情。

对于干草堆来查找拼写建议,搜索模板应包含您要查找的字段。因此,如果搜索模板包含{{object.title}},您应该提取拼写建议。

也许你忘了做

python manage.py update_index

添加了lorem note后。

答案 1 :(得分:1)

如果您使用的是默认{{ suggestion }},则

SearchView就足够了。

请参阅:

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

...查看模板上下文中的可用内容。

Hassan说明您必须更新/重建索引,并且您需要在搜索模板中使用正确的字段。

答案 2 :(得分:0)

我发现上述解决方案仅在扩展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