Как передать аргумент через URL в views

305
26 июня 2017, 21:25

Здравствуйте.

Скажите пожалуйста, как передать аргумент из ссылки URL в функцию views? То есть, у меня на странице имеется следующее:{% url 'posts:response_search' 123 %}

Как передать число 123 в функцию views, если формат сгенерированного url должен быть статическим, то есть без добавления аргумента в адресную строку. Например, вот так:

    url(r'^response_search/$', views.response_search, name='response_search'),

Но все же аргумент должен как-либо передоваться. Заранее спасибо :)

Answer 1

Можно использовать post запросы. Для этого можно использовать либо формы, либо ajax запросы. В случае с формой html код будет таким:

<form action="{% url 'posts:response_search' %}" method="post"> 
  {% csrf_token %} 
  <input type="hidden" name="parameter" value="123"> 
</form>

Если использовать ссылку на других элементах, стоит использовать ajax:

$('link').add('click', function(e) { 
  $.ajax({ 
    url: "{% url 'posts:response_search' %}", 
    data: { 
      'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val(), 
      'parameter': '123' 
    }, 
    dataType: 'json', 
    method: "POST", 
    success: function(response) { 
      // Здесь можно выполнить код после получения успешного ответа 
      console.log('Response status is: ', response.status); 
    } 
  }); 
});
<!-- Поскольку будет осуществляться передача данных необходимо использовать токен --> 
{% csrf_token %} 
<a id="link">Click</a>

В view response_search получить переданный параметр можно будет получить:

import json
from django.http import HttpResponse
def response_search(request):
    if request.method == 'POST':
        parameter = request.POST.get('parameter')
        return HttpResponse(json.dumps({'status': 'ok'}))
    else:
        # Обработать запрос get
Answer 2

Передавай через GET {% url 'posts:response_search'%}?q=123. Это сделает ссылку /response_search/?q=123.

В коде принимаешь это число через q = request.GET.get('q').

Для поиска обычно делается так.

Если используешь форму ввода, то:

<form action={% url 'posts:response_search'%}>
<input name=q>
<submit>
</form>

Метод GET не рекомендуется для запросов, которые могут изменить состояние твоего приложения. Для редактирования лучше всеж использовать POST.

READ ALSO
Неверно деобфусцировал код

Неверно деобфусцировал код

Как-то раз, давным-давно я захотел минифицировать свой JS-код, но случайно зашёл на сайт, который помимо минификации ещё и обфусцирует егоЯ...

310
Не работает IndexOf

Не работает IndexOf

Здравствуйте! Есть данный участок кода:

426
Отправка формы при помощи JS?

Отправка формы при помощи JS?

Добрый день, хочу поинтересоваться, кто-то делал отправку писем через гугл таблицы? Те, проворачивал ли, кто-то вот такую схему "сайт -> гугл...

273
HTML5 + EME + VIDEO

HTML5 + EME + VIDEO

Нужно проигрывать видео зашифрованное симметричным ключомПри этом скопировать видео нельзя и ключ тоже

248