Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active May 12, 2026 10:37
Show Gist options
  • Select an option

  • Save sunmeat/cf6f94bbdaba5c9b8ffaf440d354ea78 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/cf6f94bbdaba5c9b8ffaf440d354ea78 to your computer and use it in GitHub Desktop.
отримання даних форми Django
contact.html:
{% extends "app/layout.html" %}
{% load static %}
{% block content %}
<link rel="stylesheet" href="{% static 'app/css/styles.css' %}">
<div class="container mt-5">
<h2>{{ title|default:"Заявка на консультацію" }}</h2>
<hr>
<form method="post" class="row g-3">
{% csrf_token %}
<div class="col-12">
{{ form.as_div }}
</div>
<div class="col-12 mt-4">
<br />
<button type="submit" class="btn btn-primary btn-lg px-5">
Надіслати заявку
</button>
</div>
</form>
</div>
{% endblock %}
==============================================================================================================================
views.py:
from datetime import datetime
from django.http import HttpRequest
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import ContactForm
def contact(request):
"""Обробка форми зворотнього зв'язку"""
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# красивий вивід в консоль
print("\n" + "="*60)
print("НОВЕ ПОВІДОМЛЕННЯ З ФОРМИ ОТРИМАНО!")
print("="*60)
print(f"Дата та час: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("-" * 60)
for field_name, value in form.cleaned_data.items():
if value is None or value == '':
value = "—"
# красивий вивід назв полів
label = form.fields[field_name].label or field_name
print(f"{label:35} : {value}")
print("="*60 + "\n")
# повідомлення користувачу
messages.success(request, 'Ваша заявка успішно надіслана! Дякуємо.')
return redirect('home') # або 'contact', якщо треба залишитись на сторінці з формою
else:
# якщо є помилки валідації
messages.error(request, 'Будь ласка, виправте помилки у формі.')
else:
# GET-запит - порожня форма
form = ContactForm()
return render(request, 'app/contact.html', {
'form': form,
'title': 'Надішліть ваше повідомлення',
'year': datetime.now().year,
})
def home(request):
"""Renders the home page."""
assert isinstance(request, HttpRequest)
return render(
request,
'app/index.html',
{
'title': 'Home Page',
'year': datetime.now().year,
}
)
def about(request):
"""Renders the about page."""
assert isinstance(request, HttpRequest)
return render(
request,
'app/about.html',
{
'title': 'About',
'message': 'Your application description page.',
'year': datetime.now().year,
}
)
@sunmeat

sunmeat commented May 12, 2026

Copy link
Copy Markdown
Author
ПРАКТИКА: Створіть форму для введення імені та прізвища.
Після заповнення та надсилання даних, виведіть на html-сторінку привітання: 
«Доброго дня, [Ім'я прізвище]!».

підказки для практики:

views.py:

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            cleaned_data = form.cleaned_data  # зберігаємо дані
            
            # !!! передаємо дані через session
            request.session['contact_data'] = cleaned_data
            
            messages.success(request, 'Ваша заявка успішно надіслана!')
            return redirect('contact_success')  # нова сторінка
            
    else:
        form = ContactForm()
    
    return render(request, 'app/contact.html', {'form': form, 'title': 'Надішліть ваше повідомлення'})
    
    
    def contact_success(request): # функція перехоплення даних
    data = request.session.pop('contact_data', None)  # забираємо дані (одноразово)
    
    if not data:
        return redirect('contact')  # якщо хтось зайде напряму
    
    return render(request, 'app/contact_success.html', {
        'title': 'Заявка прийнята',
        'data': data,
        'year': datetime.now().year,
    })
    
==============================================

    contact_success.html:
    
{% extends "app/layout.html" %}
{% block content %}

<div class="container mt-5">
    <div class="alert alert-success">
        <h2>Ваша заявка успішно надіслана!</h2>
    </div>

    <h4>Дані, які ви надіслали:</h4>
    <hr>
    
    <table class="table table-bordered">
        {% for field, value in data.items %}
        <tr>
            <th style="width: 40%">{{ field|title }}</th>
            <td>{{ value|default:"—" }}</td>
        </tr>
        {% endfor %}
    </table>

    <a href="{% url 'home' %}" class="btn btn-primary">На головну</a>
</div>

{% endblock %}

==============================================

urls.py:

path('contact/success/', views.contact_success, name='contact_success'),

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment