如何将haystack(whoosh)结果显示在一个单独的页面中?

时间:2014-03-01 17:00:54

标签: python django whoosh

我有一个index.html,我的表单已经实现了:

...
{% block searchform%} {% endblock %}
...

在我的搜索/文件夹中,我有两个文件。

search.html,这是index.html的实际表单

{% extends 'index.html' %}

{% block searchform %}
    <form method="get" action="/results/">
        <table>
            {{ form.as_table }}
            <tr>
                <td>&nbsp;</td>
                <td>
                    <input type="submit" value="Search">
                </td>
            </tr>
        </table>
{% endblock %}

和文件result.html,我想看到我的搜索结果:

{% if query %}
<h3>Results</h3>
...
{% endif %}

urls.py:

from django.conf.urls import include, patterns, url
from dev_devices.views import *

urlpatterns = patterns('',
    url(r'^$', include('haystack.urls')),
    url(r'^results/$', results, name = 'results')
)
view.py

def results(request):
    return render_to_response('results.html')

我的问题是,没有结果显示出来。当我单击表单的提交按钮时,我将重定向到正确的文件(results.html),但没有显示任何结果。这个问题已经存在,但我找不到答案,所以有人可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,您没有将任何结果传递给模板。查看您的views.py

def results(request):
    return render_to_response('results.html')

您的模板具有以下逻辑:

{% if query %}
<h3>Results</h3>
...
{% endif %}

query不是上下文中的变量。您必须从视图中传递查询:

def results(request):
    return render_to_response('results.html', {'query': 'some query'})

但更重要的是,您需要从Haystack获得实际结果并将其放在上下文中。我觉得你对这里发生的事感到困惑。如果要对搜索/结果使用haystacks默认视图,则根本不应定义任何自定义视图。定义结果视图的方式,Django如何知道这个页面与Haystack有什么关系呢?

如果想要定义自定义视图,那么这些视图需要实现Haystack搜索表单,创建SearchQuerySets,分页(等等),并将该数据传递给模板。请参阅有关创建自己的视图的Haystack文档:

http://django-haystack.readthedocs.org/en/latest/views_and_forms.html#creating-your-own-view

如果您只想查看结果并且此特定网址结构对您来说并不重要,那么只需将表单操作更改为指向同一页面action="",然后将结果显示逻辑从{{1}移开到results.html。这应该可以获得Haystacks默认视图和表单附带的基本搜索结果。