2015-09-01 2 views
-1

Я включил haystack + elasticsearch в свой проект django, используя официальные документы haystack. Поиск работает хорошо, но результаты отображаются на отдельной странице (search.html). Мне нужно показать результаты поиска на той же странице, на которую я размещаю поисковый запрос. Я включаю шаблон поиска в свой base.html следующим образом: {% include 'search/search.html'%} Мои шаблоны находятся в разных каталогах: шаблоны/students/base.html и шаблоны/search/search.html. Насколько я понимаю, haystack использует собственный /search/search.html для отображения результатов поиска. Каким образом я могу изменить это поведение, как отображать результаты на одной странице? Пожалуйста помоги!Как отобразить результаты поиска (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 обрабатывает URL-адреса. То есть вместо написания URL-адресов, таких как '/ path/to/view', вы можете элегантно сказать 'module_name: view_name'. Подробнее [здесь] (https://docs.djangoproject.com/en/1.8/topics/http/urls/) –

 Смежные вопросы

  • Нет связанных вопросов^_^