django-haystack:如何在模板中访问拼写建议?

0 投票
3 回答
3545 浏览
提问于 2025-04-15 22:14

我正在尝试使用django-haystack和Solr,并且设置了HAYSTACK_INCLUDE_SPELLING = True

我想知道如何在模板中访问拼写建议(这个模板是由默认的SearchView生成的)?

补充一下:还有一个问题:拼写建议能从数据库中找到单词吗?比如,使用haystack文档中的默认Note模型和默认的SearchView,当我搜索“Lorm”这个词时,如果数据库里有一条叫“Lorem ipsum”的记录,为什么没有拼写建议呢?这是正常的吗?

谢谢 :-)

3 个回答

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

1

如果你使用的是默认的 SearchView,那么 {{ suggestion }} 应该就够用了。

你可以查看:

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

...来了解模板上下文中有哪些可用的内容。

Hassan 说得对,你需要更新或重建你的索引,并且在搜索模板中需要正确的字段。

6

如果你在模板中设置了搜索查询,你可以这样做:

{{ sqs.spelling_suggestion }}

可以查看这个链接: http://docs.haystacksearch.org/dev/searchqueryset_api.html#spelling-suggestion

获取更多详细信息。

为了让haystack找到拼写建议,搜索模板里应该包含你想要查找的字段。所以如果你的搜索模板里有{{ object.title }},那么你应该能得到拼写建议。

也许你在添加了lorem注释后,忘记做了

python manage.py update_index

这一步。

撰写回答