2015-09-01 71 views
-1

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

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() 

回答

6

您可以创建自定义视图和使用,在您的模板:

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' %}"> 
+0

Jahongir,感谢您的答复!什么是“custom_search”?模板的名字?请提供更多细节。 – Andriy

+0

@AndriyKravchenko,'custom_search'是url的名称。这是django如何处理网址。也就是说,不要像'/ path/to/view'那样写URL,你可以优雅地说'module_name:view_name'。阅读更多[这里](https://docs.djangoproject.com/en/1.8/topics/http/urls/) –

相关问题