Как использовать поле поиска Whosh Django Haystack в нескольких шаблонах приложений - PullRequest
0 голосов
/ 29 мая 2019

Я реализовал рабочее поле поиска 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>&nbsp;</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 /, или есть более эффективные способы использования поиска стога сена в полях поиска на нескольких страницах приложения?

1 Ответ

0 голосов
/ 10 июля 2019

Я решил эту проблему, добавив http://{{ request.get_host }}/search" к действию формы поиска.

`<form method="get" action="http://{{ request.get_host }}/search"`

Действие = "."будет ссылаться на вашу текущую страницу, и запрос будет перенаправлен на ваш текущий вид.Добавив URL-адрес хоста к вашему действию, он перенаправит ваш запрос в представление поиска независимо от того, на какой странице вы находитесь.

...