Для каждой вкладки своя глобальная переменная?

Рейтинг: 0Ответов: 1Опубликовано: 19.08.2023

Мне нужна глобальная переменная otv(или любое другое хранилище на замену), которая будет сохранять сообщения, а потом на страницу эти сообщения будут выводиться при отправке формы. Проблема в том, что при открытии 2-ой вкладки в браузере эта переменная сохраняет свое значение, и при выводе прошлые сообщения с 1-ой вкладки отображаются (хотя я их не вводил на 2-ой вкладке). Что делать?

Файл urls.py:

from django.urls import path
from hello import views

urlpatterns = [
    path("", views.main),
]

Файл views.py:

from django.shortcuts import render
from django.http import HttpResponse

otv=""

def main(request):
    global otv
    mes=request.POST.get("text2", "")
    otv=otv+"\n"+mes
    data={"tex":otv}
    return render(request, "index.html", context=data)
    

html:

{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>MyTeacher</title>
<link rel="stylesheet" href="{% static 'styles.css' %}" type="text/css">
</head>
<body>
<textarea name="text" readonly class="space">{{tex}}</textarea>
<p></p>
<form method="post" action="">
{% csrf_token %}
<textarea name="text2" class="space2"></textarea>
<input type="submit" value="SEND" class="but"/>
</form>

</body>
</html>

Ответы

▲ -1

Возможно твоя проблема связана с тем, что каждая вкладка браузера работает с одним и тем же глобальным контекстом, поэтому переменная otv сохраняется между вкладками.

Лично моя рекомендация это использовать хранилище переменных, такое как сессия Django или база данных.

Вот так выглядит пример для сохранения сообщений между вкладками.

Файл primer.py:

from django.shortcuts import render, redirect
from django.http import HttpResponse

def main(request):
    mes = request.POST.get("text2", "")
    
    if "otv" not in request.session:
        request.session"otv" = ""
    
    request.session"otv" += "\n" + mes  # Добавляем новое сообщение к существующему содержимому "otv"
    
    data = {"tex": request.session"otv"}
    
    return render(request, "index.html", context=data)

Теперь каждая вкладка будет иметь свою отдельную сессию, где переменная otv будет храниться отдельно для каждой вкладки.

P.S для использования сессий в Django, убедись, что у тебя настроена поддержка сессий в файле settings.py. Ты должен установить и настроить соответствующий хранилище сессий, такое как база данных или файловая система.