2015-05-18 2 views
0

Я новичок в django, поэтому это может быть очень простая проблема.
В моей Джанго форме шаблона, я поставил много полей ввода для заполнения
как этотПолучение всех входных значений запроса

<form method="POST"> 
     <input type="text" name="n_1" value="" /> 
     <input type="text" name="n_2" value="" /> 
     <input type="text" name="n_3" value="" /> 
     . 
     . 
     . 
     <input type="text" name="n_ " value="" /> 
    <input type="submit" value="submit" /> 
</form> 

Чтобы получить доступ ко всем входов, я могу сделать это один за другим, как спрашивать request.POST["n_i"] варьируя я в цикле.
Я ищу, чтобы найти способ, которым я могу получить все значения в списке или в строке, и мне не нужно искать по имени поля ввода.

+2

получить значения из запроса - 'request.POST.values ​​()'.и Получить ключи (имя ввода) из запроса- 'request.POST.keys()'. –

+0

еще два вопроса ... request.POST.values ​​будет в списке? и могут ли два входа иметь одинаковые имена? – aniket

+0

1. Да, это список возврата. 2.yes, в шаблоне мы можем устанавливать одинаковые имена для ввода тегов, но во время вызова URL-адреса только одно значение (может быть последнее) из тех же входных тегов передается в Request и Python view, получает только одно значение из-за его отображения ключа и значения. Поэтому не используйте одно и то же имя ввода в шаблоне. (В случае кнопки Redio мы можем использовать.) –

ответ

1

Вы можете перемещаться по всей request.POST и получить значения текстовых полей:

values = [value for name, value in request.POST.iteritems() 
       if name.startswith('n_')] 

startswith() требуется отфильтровать значение кнопки submit.

Но имхо лучший вариант заключается в использовании входов с тем же именем и получить значение с getlist() методом:

<form method="POST"> 
     <input type="text" name="n" value="" /> 
     <input type="text" name="n" value="" /> 
     <input type="text" name="n" value="" /> 
     . 
     . 
     . 
     <input type="text" name="n" value="" /> 
    <input type="submit" value="submit" /> 
</form> 

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

values = request.POST.getlist('n') 
+0

Так что наличие более одного входа с таким же именем не создаст проблем. – aniket

+0

Да. Если у вас есть несколько параметров 'GET' /' POST' с тем же именем, то 'getlist()' вернет список всех значений. Но простой 'request.POST ['n']' будет возвращать только одно значение (я не уверен, что первый или последний). – catavaran

1

Как @Vivek Sable, упомянутый в его комментарии, вы можете использовать request.POST.values() и request.POST.keys(). Другая возможность - convert the POST dictionary into a list of tuples с request.POST.items().

Помимо тех, я бы настоятельно рекомендуем вам рассмотреть возможность использования стандартного Django формы класса:

forms.py:

from django import forms 

class NameForm(forms.Form): 
    your_name = forms.CharField(label='Your name', max_length=100) 

шаблона:

<form action="/your-name/" method="post"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Submit" /> 
</form> 

Тогда вы бы способный построить форму из таких данных:

form = NameForm(request.POST) 

И после звонка form.is_valid() он собрал данные в form.cleaned_data.

Подробнее о формах на Django documentation: Working with forms.

+0

Причина, по которой я не использовал Djnago Form, заключается в том, что мне это не очень удобно. – aniket

+0

Я понимаю, но после того, как вы овладеете им, вы увидите, что это не очень сложно и делает вещи очень простыми! – Wtower

+0

В любом случае предположим, что я просил имена заполнить, но количество входов может варьироваться в зависимости от формы-заполнителя, будет вводить проблему, потому что в forms.py я точно не знаю, сколько ресурсов нужно заполнить? – aniket

1

Получить форму значения в Django Просмотр:

Получить от Запрос - request.POST.values()

Получить ключи (имя вход) из request- request.POST.keys()


Получить все ключи и значения из запроса в словаре:

zip(request.POST.keys(), request.POST.values())

Смежные вопросы