Почему шаблон HTML/Django выполняет код не по порядку?
Этот html-шаблон из моего онлайн-курса выполняется как положено, но почему? Кажется, что он выполняется не по порядку:
- Вызывает мой класс формы python, используя синтаксис Django {{form}}, чтобы ввести пустые поля для заполнения пользователем (имя, email, textbox) .
- Пользователь может ввести данные и нажать кнопку "Submit"
- но затем (что смущает) класс {{form}} вызывается снова с информацией о вводе, так как затем он успешно выводит пользовательский ввод на терминал. Почему так происходит?
html в templates.py
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<h1>fill out the form</h1>
<div class="container">
<form method="POST">
{{form}}
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="submitme">
</form>
</div>
</body>
</html>
КлассForm в views.py
def form_name_view(request):
form = forms.FormName()
if request.method == "POST":
form = forms.FormName(request.POST)
if form.is_valid():
print("VALIDATION SUCCESS")
print("NAME: " + form.cleaned_data['name'])
print("EMAIL: " + form.cleaned_data['email'])
print("TEXT: " + form.cleaned_data['text'])
return render(request, 'first_app/form_page.html', {'form' : form})
Дополнительно: url, который использует шаблон html и мой класс форм
from django.urls import path
from first_app import views
urlpatterns = [path('formpg', views.form_name_view, name = 'formpg')]
Как упоминается в Django form docs,
Данные формы, отправленные обратно на сайт Django, обрабатываются представлением, обычно тем же представлением, которое опубликовало форму. Это позволяет нам повторно использовать часть той же логики.
Итак, ваш код выполняется в правильном порядке:
- При первой загрузке страницы выполняется GET-запрос и вызывается
form_name_view(). Это создает пустой объект Form и преобразует его в html-форму с помощьюrender(request, 'first_app/form_page.html', {'form' : form}).
<<<Когда html-форма отправлена, выполняется POST-запрос и создается новый объект Form с данными, отправленными из браузера. Как и в примере, вы можете захотеть направить пользователей на другую страницу, если отправленная ими форма действительна.