Не удается получить данные из 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.
Как я могу решить эту проблему?
В коде есть незначительные ошибки:
Вам нужно вернуть HttpResponse так
return HttpResponse(html_template.render(request))
, но я бы рекомендовал вам напрямую использоватьreturn render(request, 'home/index.html')
.Также необходимо разместить
.{% 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>