Не удается получить данные из Django в html

views.py:

def index(request):
    if request.method == 'POST':
        data = request.POST['data']
        context = {'mydata': data}
        return render(request, 'home/index.html', context)
    else:
        html_template = loader.get_template('home/index.html')
        HttpResponse(html_template.render(request))

index.html:

<form method = 'POST' id = 'post-form'>
      <select name = 'data' id = 'data'> 
        <option> 1 </option>
        <option> 2 </option>
      </select>
      <button type="submit" name = 'post-form'> submit </button>
</form>

<h2> {{ mydata}} </h2> // this line print nothing.

Когда я нажимаю кнопку submit, я могу получить доступ к данным из html submit в файле views.py.

Однако, я не могу получить доступ к mydata из Django в html.

Как я могу решить эту проблему?

В коде есть незначительные ошибки:

  1. Вам нужно вернуть HttpResponse так return HttpResponse(html_template.render(request)), но я бы рекомендовал вам напрямую использовать return render(request, 'home/index.html').

  2. Также необходимо разместить {% csrf_token %} при работе с POST данными внутри формы, если вы не упомянули @csrf_exempt декоратор на view.

    .

Итак, попробуйте следующий код:

views.py:


def index(request):
    if request.method == 'POST':
        data = request.POST.get('data')
        context = {'mydata': data}
        return render(request, 'home/index.html', context)
    else:
        return render(request, 'home/index.html')
                    # OR  #
        # html_template = loader.get_template('home/index.html')
        # return HttpResponse(html_template.render({}, request))

index.html:

<form method='POST' id='post-form'>
    {% csrf_token %}
    <select name='data' id='data'> 
        <option> 1 </option>
        <option> 2 </option>
    </select>
    <button type="submit" name='post-form'> submit </button>
</form>
    
<h2> {{mydata}} </h2>
Вернуться на верх