Атрибут действия формы Django не работает - PullRequest
0 голосов
/ 12 декабря 2018

Я работаю над приложением в Django 1.11, над функцией поиска.Я установилasticsearch - здесь все работает.

В base.html и под URL 127.0.0.1:8000 - у меня есть форма для поиска, и я хотел бы сохранить эту форму здесь.С другой стороны, у меня есть поисковое приложение с view, url, template - под url 127.0.0.1:8000/search/ - здесь работает поиск.

Чтобы решить эту проблему - найдите на главной странице и перенаправьте на сайт с результатами, которые я пыталсяиспользуйте атрибут action в форме django.

форму в base.html

    <form action="{% url 'search:search' %}" method="post">
        {% csrf_token %}
        <div class="input-group">
          <input type="text" class="form-control" id="q" {% if request.GET.q %}value="{{ request.GET.q }}"{% endif %} name="q" placeholder="Search">
          <div class="input-group-append">
            <button class="btn btn-outline-primary" type="button">GO</button>
          </div>
        </div>
    </form>

представление в поисковом приложении

def search(request):
    q = request.GET.get('q')
    if q:
        posts = PostDocument.search().query('match', title=q)
    else:
        posts = ''
    return render(request, 'search/search.html', {'posts': posts})

шаблон с результатами

{% extends 'base.html' %}

{% block content %}
    {% for p in posts %}
        <a href="#">{{ p.title }}</a>
    {% endfor %}

{% endblock content %}
{% block sidebar %}{% endblock sidebar %}

1 Ответ

0 голосов
/ 12 декабря 2018

Вы тут смешиваете GET и POST.Если метод method="post", то данные передаются в запросе и, таким образом, попадают в словарь запросов request.POST.

Если, с другой стороны, метод method="get", то данныезаканчивается в строке запроса URL.В этом случае вы действительно можете использовать request.GET.

Часто (не всегда) поисковые запросы выполняются с помощью строк запросов, поскольку тогда человек может скопировать URL-адрес и отправить его другому человеку, и этот человек таким образомможно просмотреть результаты поиска.

Таким образом, вы можете изменить форму на:

<form action="{% url 'search:search' %}" method="<b>get</b>">
    {% csrf_token %}
    <div class="input-group">
        <input type="text" class="form-control" id="q" {% if request.GET.q %}value="{{ request.GET.q }}"{% endif %} name="q" placeholder="Search">
        <div class="input-group-append">
            <button class="btn btn-outline-primary" type="button">GO</button>
        </div>
    </div>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...