Чтение выбора пользователя из шаблона Django 1.5 без использования моделей

#python #html #django #templates #html-select

#python #HTML #django #шаблоны #html-select

Вопрос:

Я использую Python27 с Django 1.5.

я часами безуспешно искал в Интернете. Есть ли способ захватить то, что пользователь выбрал из выпадающего списка в шаблоне, без использования моделей? Я ищу прямой способ считывания какой-либо переменной в коде в views.py .

example.html

 <select name="num_select">
    <option value="0">-----</option>
    <option value="10">1 - 10</option>
    <option value="20">10 - 20</option>
    <option value="30">20 - 30</option>
    <option value="40">30 - 40</option>
    <option value="all">all</option>
</select>
  

какой бы вариант я ни выбирал, я хочу передать значение переменной в моем views.py

views.py

 def my_view(request):
    ...
    num_select = forms.????.get['num_select']
    ...
    return blah blah....
  

Я надеюсь, что я предоставил достаточно подробностей, чтобы вы могли мне помочь. Не уверен, что еще я могу добавить. Я безуспешно просматривал страницы документов. Я знаю, как получить переменные из views.py к html-шаблонам, но не наоборот.

Помощь очень ценится.

Комментарии:

1. используйте print(forms) или даже print( dir(forms) ) для того, чтобы посмотреть, что у вас есть в формах.

2. спасибо за ответ. не знаю, как использовать это, чтобы получить то, что мне нужно. судя по приведенному ниже, я думаю, что у меня все должно быть хорошо. Спасибо!

3. dir(object) возвращает все функции и переменные в объект — это полезно, если вы не помните имена и не используете IDE с автозаполнением.

Ответ №1:

Да, вам вообще не нужны модели для этого, вам нужна простая форма django.

 CHOICES = ( (1,"10"), (2,"20"), ...)

class MyForm(forms.form):
    ...
    num_select = forms.ChoiceField(choices = CHOICES)
    ...
  

Тогда, на ваш взгляд

 from myapp.forms import MyForm

def my_view(request):

    if request.method = 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
              num_select = form.cleaned_data['num_select']
  

Это, конечно, довольно урезанная его версия, для получения дополнительной информации обратитесь к ссылке выше.

Если вы также не хотите использовать форму, вы можете просто получить доступ request.POST напрямую, но тогда какой смысл использовать Django? вы могли бы также использовать PHP

Комментарии:

1. да! было почти там. похоже, это именно то, что мне нужно. Спасибо.

Ответ №2:

Вы можете читать необработанные данные формы с помощью HttpRequest.POST API

https://docs.djangoproject.com/en/1.10/ref/request-response/#django.http .HttpRequest.Публикация

Это объект, подобный словарю, содержащий все заданные параметры HTTP POST.

Вы можете просто request.POST['num_select']

Не забудьте включить if request.method == 'POST': перед использованием request.POST

Комментарии:

1. это выглядит интересно… я определенно поиграю с этим. Спасибо!