Django - получение значений из запроса POST


84

У меня есть следующий шаблон django (http: // IP / admin / start / назначается гипотетическому представлению под названием view):

{% for source in sources %}
  <tr>
    <td>{{ source }}</td>

    <td>
    <form action="/admin/start/" method="post">
      {% csrf_token %}
      <input type="hidden" name="{{ source.title }}">
      <input type="submit" value="Start" class="btn btn-primary">
    </form>
    </td>

  </tr>
{% endfor %}

sources- objects.all()это модель Django, на которую ссылается представление. Каждый раз, когда щелкают ввод «Начать» для отправки, я хочу, чтобы «начальное» представление использовало {{ source.title}}данные в функции перед возвратом обработанной страницы. Как мне собрать POST-информацию (в данном случае в скрытом вводе) в переменные Python?

Ответы:


145

Прочтите об объектах запроса, которые получают ваши представления: https://docs.djangoproject.com/en/dev/ref/request-response/#httprequest-objects

Также вашему скрытому полю нужно надежное имя, а затем значение:

<input type="hidden" name="title" value="{{ source.title }}">

Тогда в представлении:

request.POST.get("title", "")

Я использую Django Forms, где у меня нет независимого inputи просто a, {{ form }}а моя форма имеет только один ввод текста (поле ввода). как я могу получить доступ к его данным?
Nitwit

@Nitwit nameатрибутом будет имя свойства, которому вы присвоили поле char. Если вы не на 100%, нажмите F12 в браузере с загруженной формой и выберите элемент ввода, чтобы увидеть, что Django дал атрибут name.
Джеймс Беллаби,

13

Если вам нужно что-то сделать в интерфейсе, вы можете ответить на событие onsubmit вашей формы. Если вы просто отправляете сообщение в admin / start, вы можете получить доступ к переменным сообщения в вашем представлении через объект запроса. request.POST - словарь пост-переменных.


Другой ответ помог мне с проблемой, которую я собирался задать вам (определения html-селекторов имени / значения), прежде чем я его спросил, поэтому я продолжу и отмечу, что он принят. Спасибо за вашу помощь. :)
Randall Ma

2

Для форм django вы можете сделать это;

form = UserLoginForm(data=request.POST) #getting the whole data from the user.
user = form.save() #saving the details obtained from the user.
username = user.cleaned_data.get("username") #where "username" in parenthesis is the name of the Charfield (the variale name i.e, username = forms.Charfield(max_length=64))

UserLoginForm в ответе - название формы
Irfan wani
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.