Django Haystack - 拼写建议上下文变量未设置

3
我已经在Haystack和Solr中正确配置了拼写建议,但是在使用SearchView时,suggestion上下文变量没有被设置。我意识到这是由于https://github.com/toastdriven/django-haystack/commit/8bf366b6781b22810696b18723da5902ce01e5b7引起的:
if self.results and hasattr(self.results, 'query') and self.results.query.backend.include_spelling:
    context['suggestion'] = self.form.get_suggestion()

看起来只有在有结果时才设置变量,这显然不正确。如果有人能指点我正确的方向,我将不胜感激。

1个回答

1
您可以重写SearchView的create_response方法(回退您提到的补丁):
class MySearchView(SearchView):
    def create_response(self):
        (paginator, page) = self.build_page()

        context = {
            'query': self.query,
            'form': self.form,
            'page': page,
            'paginator': paginator,
            'suggestion': None,
        }

        if self.results.query.backend.include_spelling:
            context['suggestion'] = self.form.get_suggestion()

        context.update(self.extra_context())
        return render_to_response(self.template, context, context_instance=self.context_class(self.request))

这确实可以工作,但是SearchView代码中条件语句背后的原因是什么?当没有结果时,难道不应该特别显示建议吗? - Dmitriy Smirnov
我认为条件语句是一种过度的尝试,旨在减轻对于无意义查询(如“。”)的错误建议,但我同意您的观点,应该提供建议。然而,真正知道原因的人只有Haystack的开发者 :) - furins
然而,提供建议只是一种可能的行为,因此原因可能是开发人员会强制您覆盖create_response以处理特殊情况,就像这种情况一样:由您决定是否值得提供建议,提供哪种建议等等...仅仅是我的个人看法。 - furins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接