Я включил 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> </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 }} {{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()
Jahongir, спасибо за ответ! Что такое "custom_search" здесь? имя шаблона? Пожалуйста, дайте более подробную информацию. – Andriy
@AndriyKravchenko, 'custom_search' - это имя URL-адреса. Это то, как django обрабатывает URL-адреса. То есть вместо написания URL-адресов, таких как '/ path/to/view', вы можете элегантно сказать 'module_name: view_name'. Подробнее [здесь] (https://docs.djangoproject.com/en/1.8/topics/http/urls/) –