Django: преобразование данных формы в "чистый URL"

Допустим, у меня есть следующая форма:

<form id="search-form" class="form-horizontal" method="GET" action="/results/" role="form">
    <input type="text" class="form-control" id="query" name="query">

    <button type="submit"  form="search-form" class="btn btn-primary">
        <span class="glyphicon glyphicon-search" aria-hidden="true"></span>       
    </button>
</form>

В настоящее время, когда форма отправляется, URL содержит запрос в качестве параметра, например, так: www.<my-domain>.com/results?query=<some-query>, Тем не менее, для целей SEO я хочу преобразовать это в "чистый URL", который будет выглядеть примерно так: www.<my-domain>.com/results/<some-query>,

Я сделал следующие изменения в моем urls.py:

urlpatterns = [
    ...
    url(r'^results/(?P<query>[a-zA-Z ]+)$', views.ResultsView.as_view(), name="results"),
    ...
]

Так что я должен иметь возможность получить значение запроса в моем ResultsView следующим образом:

class ResultsView(TemplateView):

    def dispatch(self, request, *args, **kwargs):

        query = kwargs.get('query')

Как я могу отправить форму, чтобы она соответствовала шаблону URL? Я попытался поиграться с действием формы, передав ему входной идентификатор, например так: action="/results/query/"но, очевидно, думает query является литеральной строкой и не заменяет ее значением ввода.

1 ответ

Решение

Вы можете легко сделать это с JQuery. Нажав кнопку, отмените действие по умолчанию и определите URL-адрес, на который он должен перенаправляться, в window.location.href,

<script>
    $(document).ready(function () {
        $("button").click(function (e) {
            e.preventDefault();
            query = $("#query").val();
            window.location.href = location.origin + "/results/" + query;
        });
    });
</script>

Не забудьте добавить зависимость

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js">
Другие вопросы по тегам