【问题标题】:How to show haystack(whoosh) results into a separate page?如何将 haystack(whoosh) 结果显示到单独的页面中?
【发布时间】:2014-03-01 17:00:54
【问题描述】:

我有一个 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),但没有显示任何结果。这个问题已经存在,但我没有找到答案,所以有人可以帮助我吗?谢谢!

【问题讨论】:

    标签: python django whoosh


    【解决方案1】:

    好吧,您没有将任何结果传递给模板。查看您的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 搜索表单、创建 SearchQuerySet、分页(等等),并将该数据传递给模板。有关创建您自己的视图,请参阅 Haystack 文档:

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

    如果您只是想查看结果并且此特定 URL 结构对您来说并不重要,那么只需将表单操作更改为指向同一页面 action="" 并将结果显示逻辑从 results.html 移动到 @987654329 @。这应该会为您提供 Haystacks 默认视图和表单附带的基本搜索结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      相关资源
      最近更新 更多