django-haystack:如何在模板中访问拼写建议?
我正在尝试使用django-haystack和Solr,并且设置了HAYSTACK_INCLUDE_SPELLING = True
。
我想知道如何在模板中访问拼写建议(这个模板是由默认的SearchView
生成的)?
补充一下:还有一个问题:拼写建议能从数据库中找到单词吗?比如,使用haystack文档中的默认Note
模型和默认的SearchView
,当我搜索“Lorm”这个词时,如果数据库里有一条叫“Lorem ipsum”的记录,为什么没有拼写建议呢?这是正常的吗?
谢谢 :-)
3 个回答
我发现上面提到的解决方案只有在我们扩展 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
如果你使用的是默认的 SearchView
,那么 {{ suggestion }}
应该就够用了。
你可以查看:
https://github.com/toastdriven/django-haystack/blob/master/haystack/views.py#L118
...来了解模板上下文中有哪些可用的内容。
Hassan 说得对,你需要更新或重建你的索引,并且在搜索模板中需要正确的字段。
如果你在模板中设置了搜索查询,你可以这样做:
{{ sqs.spelling_suggestion }}
可以查看这个链接: http://docs.haystacksearch.org/dev/searchqueryset_api.html#spelling-suggestion
获取更多详细信息。
为了让haystack找到拼写建议,搜索模板里应该包含你想要查找的字段。所以如果你的搜索模板里有{{ object.title }},那么你应该能得到拼写建议。
也许你在添加了lorem注释后,忘记做了
python manage.py update_index
这一步。