Я реализовал рабочее поле поиска Haystack / whoosh в Django 1.6, следуя инструкции Майка Хибберта: https://www.youtube.com/watch?v=B-n6_m66TmA. Реализация работает в поле поиска при загрузке в твиттере на панели навигации по URL 'search'.Я хотел бы использовать реализацию на нескольких страницах в моем приложении, но это не работает.
Я пытался реализовать код search.html на других страницах с помощью панелей поиска, но он изменяет префикс URL-адреса поиска с 'search / ...' на URL-адрес страницы, например, на 'front / ... »на главной странице.Я также пытался включить search.html на другие страницы, как в качестве содержимого блока, так и с помощью тега include в шаблоне, но это не сработало.
# in app/templates/search/indexes/search.html
{% extends 'base_searches.html' %}
{% block content %}
<form method="get" action=".">
<table>
<tr><th><label for="id_q"></label></th><td><input type="text" id="id_q"
name="q" placeholder="Search..." class="form-control" /><button
class="btn btn-success" type="submit" value="Search"><spaclass="glyphicon
glyphicon-search"></span></button></td></tr>
<tr>
<td> </td>
{% if query %}
{% for result in page.object_list %}
<div class="alert alert-success" role="alert">
Hi, {{ user }}, here's the found database match for your search
<a href="{{ result.object.get_absolute_url }}">
{{result.object.title }}.</a></div>
{% empty %}
<div class="alert alert-info" role="alert">
<strong>Hi {{ user }}, there's no match found in the
database for your search !.</strong>
</div>
{% endfor %}
{% endif %}
<div class="col-xs-6 col-sm-3 sidebar-offcanvas" id="sidebar">
<!--/.sidebar-offcanvas-->
<!--/row-->
<hr>
<td>
</td>
</tr>
</table>
</form>
</body>
</html>
{% endblock %}
# in models.py for each indexed model field
def get_absolute_url(self):
return '%s' % self.id
# in app/templates/base_searches.html
<form class="navbar-form navbar-right" id="search">{% csrf_token %}
<center><h> <td colspan="1" id="content">{% block content %}}
{% endblock %} </center></td></h>
<ul id="search-results">
</ul>
</form>
in urls.py
from haystack.query import SearchQuerySet
url(r'^search/',include('haystack.urls'),name='haystack_search'),
# in search_indexes.py
from haystack import indexes
from app.models import Article
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
text= indexes.CharField(document=True,use_template=True)
content = indexes.CharField(model_attr='description')
content_auto = indexes.EdgeNgramField(model_attr='title')
def get_model(self):
return Article
def index_queryset(self, using=None):
"""used when the entire index for model is updated """
return self.get_model().objects.all()
# in app/templates/search/indexes/appname/article_text.txt
{{ object.title }}
{{ object.content}}
Как включить search.html на другие страницы, как я включил его в панель навигации в base_searches.html, и сохранить префикс поиска / .. searchresult для функции get_absolut_url дляобъект результата поиска, а не префикс URL для других страниц, в которые я пытаюсь включить его, например, front / .. searchresult?при попытке реализовать его на главной странице с помощью URL-адреса front /, или есть более эффективные способы использования поиска стога сена в полях поиска на нескольких страницах приложения?