django - сбор данных из HTML <select> - PullRequest
6 голосов
/ 24 января 2011

Я видел пару документов о том, как собрать данные из оператора HTML в Django, но ни один из них не был мне очень понятен. У кого-нибудь есть реальный рабочий пример, которым можно поделиться?

В моем случае у меня есть что-то подобное в моем файле шаблона:

<select title="my_options">
   <option value="1">Select value 1</option>
   <option value="2">Select value 2</option>
</select>

Что идет в views.py для сбора выбранного значения? Спасибо!

Ответы [ 2 ]

6 голосов
/ 24 января 2011

Если это запрос GET, request.GET['my_options']. Если это ПОЧТА, то request.POST['my_options']. Это будет строка, "1" или "2" (или "<script>alert('I hacked you!')</script>")

В любом случае, вероятно, лучше использовать Фреймворк форм Django , чтобы избавить вас от необходимости написания HTML-кода и очистки возвращаемых значений.

0 голосов
/ 07 мая 2015

Управление данными через POST

def yourView(request):
    # Use '.get('id', None)' in case you don't receive it, avoid getting error
    selected_option = request.POST.get('my_options', None)  

    if selected_option:
        # Do what you need with the variable

Одна вещь, которая может быть полезна с формами в Django, - это делать разные вещи, если вы делаете POST для URL или просто загружаете его:

def yourView(request):

    if request.POST:  # If this is true, the view received POST
        selected_option = request.POST.get('my_options', None)
        if selected_option:
            # Do what you need to do with the variables
        return render_to_response(...)

return render_to_response(...)

Есть 2 render_to_response на случай, если вам нужно будет выполнить разные действия, если представление только что загружено или получило POST.

Управление данными через GET

def yourView(request):
    # Use '.get('id', None)' in case you don't receive it, avoid getting error
    selected_option = request.GET.get('my_options', None)  

    if selected_option:
        # Do what you need with the variable
...