如何在同一个页面上显示搜索结果(django+haystack+elasticsearch)?

How to display search results(django+haystack+elasticsearch) on the SAME page?

根据官方 haystack 文档,我将 haystack+elasticsearch 包含到我的 django 项目中。搜索工作正常,但结果显示在单独的页面中 (search.html)。我需要在放置搜索查询的同一页面上显示搜索结果。 我将搜索模板包含到我的 base.html 中,如下所示:{% include 'search/search.html' %} 我的模板在不同的目录中:templates/students/base.html 和 templates/search/search.html。据我所知,haystack 使用它自己的 /search/search.html 来显示搜索结果。我可以通过哪种方式更改该行为,如何在同一页面上显示结果?请帮忙!

urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin

from students.views.students import StudentUpdateView
from students.views.students import StudentDeleteView
from students.views.students import StudentAddView
from students.views.groups import GroupDeleteView
from students.views.journal import JournalView

urlpatterns = patterns('',

#haystack search url
    (r'^search/', include('haystack.urls')),

# main page url

    url(r'^$', 'students.views.students.students_list', name ='home'),

search.html:

<form method="get" action="">
 <table>
    {{ form.as_table }}
    <tr>
        <td>&nbsp;</td>
        <td>
              <input type="text" name="q">
              <button type="submit">Search</button>

        </td>
    </tr>
</table>
    {% for student in page.object_list %}
    <p><span style= "color:blue">Student:</
    span> {{ student.object.first_name }}&nbsp;{{student.object.last_name }}</p>

   <p>Ticket: {{ student.object.ticket }}</p>
   <p>Group: {{ student.object.student_group }}</p>

  {% empty %}
    <p>No results found.</p>
  {% endfor %}

seach_indexes.py:

from haystack import indexes
from students.models.students import Student

class StudentIndex(indexes.SearchIndex, indexes.Indexable):
    text             = indexes.CharField(document=True, use_template=True) 
    last_name     = indexes.CharField(model_attr='last_name')

    def get_model(self):
        return Student

    def index_queryset(self, using=None):       
        return self.get_model().objects.all()

您可以创建自定义视图并在模板中使用它:

class CustomSearchView(SearchView):
    template_name='/path/to/template.html'

在你的 urls.py:

urlpatterns = patterns('',
    url(r'^custom_search$', CustomSearchView.as_view(), name='custom_search'),
)

在您的模板中,只需在表单中调用此视图即可:

<form method="get" action="{% url 'search:custom_search' %}">