webapp.html:
<script>
        document.addEventListener('DOMContentLoaded', function () {
            const webApp = window.Telegram.WebApp;
            webApp.expand();

            const tgsContainer = document.getElementById('tgs-container');
            tgsContainer.innerHTML = `
                <lottie-player
                    src="{% static 'lottery_app/assets/animation/ticket.json' %}"
                    background="transparent"
                    speed="1"
                    style="width: 100%; height: 100%"
                    loop
                    autoplay>
                </lottie-player>
            `;

            if (!webApp.initDataUnsafe || !webApp.initDataUnsafe.user) {
                webApp.showAlert("Ошибка авторизации. Пожалуйста, откройте через бота.");
                return;
            }

            const lotteryId = new URLSearchParams(window.location.search).get('lottery_id');

            if (!lotteryId) {
                webApp.showAlert("Не удалось определить розыгрыш");
                return;
            }

            const user_id = webApp.initDataUnsafe.user.id;
			//const user_id = 1164013363;
			const username = webApp.initDataUnsafe.user.username || null;
			//const username = "Creativitty";
			

            let currentTickets = 1;

            const quantityValue = document.getElementById('quantity-value');
            const sliderThumb = document.getElementById('slider-thumb');
            const sliderProgress = document.getElementById('slider-progress');
            const totalPriceElement = document.getElementById('total-price');
            const payButton = document.getElementById('pay-button');
            const termsCheckbox = document.getElementById('terms-checkbox');
            const tickMarksContainer = document.getElementById('slider-tick-marks');
            const priceDisplay = document.querySelector('.event-price .price');
            const priceOriginal = document.querySelector('.event-price .price-original');
            const prizeSection = document.querySelector('.prize-cards');

            

            payButton.addEventListener('click', () => {
                const pricePerTicket = 100
                const totalPrice = 100

                if (payButton.hasAttribute('disabled')) {
                    return;
                }

                webApp.HapticFeedback.notificationOccurred('success');

                fetch(`/api/payments/create/`, {
                    method: "POST",
                    headers: { "Content-Type": "application/json" },
                    body: JSON.stringify({
                        lottery_id: lotteryId,
                        user_id: user_id,
						username: username,
                        quantity: currentTickets,
                        total_price: totalPrice,
                    })
                })
                    .then(response => response.json())
                    .then(data => {
                        console.log("Ответ от сервера:", data);
                        if (data.success && data.payment_link) {
                            webApp.HapticFeedback.notificationOccurred('success');
                            window.location.href = data.payment_link;
                        } else {
                            webApp.HapticFeedback.notificationOccurred('error');
                            webApp.showAlert("Ошибка создания платежа!");
                            payButton.innerText = "Заплатить " + getPricePerTicket(currentTickets) + " ₽";
                            payButton.removeAttribute("disabled");
                        }

                        // Можно закрыть аппку
                        // webApp.close();
                    })
                    .catch(error => {
                        console.error("Ошибка:", error);
                        webApp.HapticFeedback.notificationOccurred('error');
                        webApp.showAlert("Ошибка при оплате!");
                        payButton.innerText = "Заплатить " + getPricePerTicket(currentTickets) + " ₽";
                        payButton.removeAttribute("disabled");
                    });
            });

            
        });
    </script>


Обрати внимание на скрипт, то, как он написан.
Мне нужно написать похожий скрипт, который будет выполнятся при переходе на страницу:
thanks.html:
{% load static %}
<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <meta name="format-detection" content="telephone=no">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="MobileOptimized" content="176">
    <meta name="HandheldFriendly" content="True">
    <meta name="robots" content="noindex, nofollow">
    <title>Muvaffaqiyatli</title>
    <link rel="stylesheet" href="{% static 'lottery_app/assets/styles/index.css' %}">
    <link rel="stylesheet" href="{% static 'lottery_app/assets/styles/thanks.css' %}">
    <link href="https://cdn.jsdelivr.net/npm/sf-font@1.0.0/stylesheet.min.css" rel="stylesheet">
    <script src="https://telegram.org/js/telegram-web-app.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lottie-player/1.4.3/lottie-player.min.js"></script>
</head>

<body>
    <div class="container">
        <header class="header">
            <h1 class="title">Lucky Ticket</h1>
        </header>

        <div class="thanks-container">
            <div class="thanks-animation" id="duck-animation"></div>
            <h1 class="thanks-title">Muvaffaqiyatli!</h1>
            <p class="thanks-message">Sizning noyob chiptalaringiz 5 daqiqa ichida shaxsiy xabar bilan yuboriladi!</p>
            <button class="button" id="close-button">Yopish</button>
        </div>
    </div>

    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const webApp = window.Telegram.WebApp;
            webApp.expand();

            const duckContainer = document.getElementById('duck-animation');
            duckContainer.innerHTML = `
                <lottie-player
                    src="{% static 'lottery_app/assets/animation/duck.json' %}"
                    background="transparent"
                    speed="1"
                    style="width: 100%; height: 100%"
                    loop
                    autoplay>
                </lottie-player>
            `;

            const closeButton = document.getElementById('close-button');
            closeButton.addEventListener('click', () => {
                webApp.HapticFeedback.notificationOccurred('success');
                webApp.close();
            });
        });
    </script>
</body>

</html>

Но нужно отправлять запрос на другой endpoint:

urls.py:
from django.urls import path
from .views import create_payment, payment_webhook, payment_success

app_name = "payments"

urlpatterns = [
    path("create/", create_payment, name="create_payment"),
    path("webhook/", payment_webhook, name="payment_webhook"), # Этот вебхук для реальной оплаты, если используем prodamus, то тут должно быть "payment_webhook". Если хотим фейк успешную оплату без кассы, а просто выдать билет, то "payment_success"
    path("success/", payment_success, name="payment_success"), # Отображает уточку, после измений еще и генерит билет для конкретного чела. (Только для закрытого чата).
]


Отправляй на success, тоесть при входе на сайт thanks.html отправляется запрос на path("success/", payment_success, name="payment_success"), а он в свою очередь создает уникальный билет участника и отправляет его.

Вот примерный код для payment_success:

@csrf_exempt
def payment_success(request):
    """Обрабатывает успешную оплату и рендерит страницу благодарности"""

    print("СРАБОТАЛ PAYMENT_SUCCESS ПОСЛЕ ОПЛАТЫ")
    print(request)
    
    return render(request, "thanks.html")

    if request.method == "GET":
        data = request.GET
        print("GET-данные:", data)

        if data.get("_payform_status") != "success":
            return HttpResponse("Оплата не была успешной.", status=400)

        order_id = data.get("_payform_order_id")
        if not order_id:
            return HttpResponse("Отсутствует order_id.", status=400)

        try:
            lottery_id, user_id = order_id.split("-")
            quantity = int(data.get("quantity", 1))
            total_price = float(data.get("amount", 0))
        except (ValueError, AttributeError) as e:
            print("Ошибка обработки данных:", e)
            return HttpResponse("Некорректные данные.", status=400)

        # Запуск фоновой задачи
        process_payment_task.delay(lottery_id, user_id, quantity, total_price)

        print("КОНЕЦ PAYMENT_SUCCESS ПОСЛЕ ОПЛАТЫ.")

        return render(request, "thanks.html")

    return HttpResponse("Неподдерживаемый метод запроса.", status=405)

Это только шаблон, чтобы ты понял какие параметры нужно передавать в 
process_payment_task.delay(lottery_id, user_id, quantity, total_price)

Все переменные по типу lottery_id, user_id , quantity, total_price нужно передавать уже внутри запроса. Так как это webapp телеграма, то на thanks.html можно добавить 
const user_id = webApp.initDataUnsafe.user.id;
const username = webApp.initDataUnsafe.user.username || null;
И т.д

А сам webapp.html при нажатии на кнопку "payButton" должен редиректить на thanks.html, передавая все необходимые параметры, чтобы скрипт в thanks.html корректно выполнился