Я столкнулся с интересным препятствием в моей программе Django.Я пытаюсь создать небольшую календарную программу, в которой пользователи могут видеть календарь в textarea
, обновлять его в соответствии со своими предпочтениями, и он будет загружать обновление в календарь, и вы сможете увидеть обновленный календарь из любой точки мира.Я попытался использовать файл для хранения информации календаря, но возникли проблемы с файлом, который не обновляется и тому подобное.
Поэтому вместо этого я выбрал новый подход, вместо этого сохраняя календарь в глобальной переменной и передаваяинформация о том, где в программе это необходимо.
Вот программа:
views.py
from django.shortcuts import render
from django.contrib import messages
import sys
global file_content
f = open('calendar.txt', "r")
file_content = f.read()
f.close()
if f.closed:
print("CLOSED FILE from read views")
def writeFile(content, file):
from .forms import FileForm
f = open(file, "w")
f.write(content)
f.close()
if f.closed:
print("CLOSED FILE from write views")
def home(request):
from .forms import FileForm
return render(request, 'main/index.html',{'file_content':file_content})
def form_get(request):
from .forms import FileForm
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = FileForm(request.POST)
# check whether it's valid:
if form.is_valid():
global file_content
cd = form.cleaned_data['form']
writeFile(cd, 'calendar.txt')
file_content = cd
print(file_content)
else:
form = FileForm()
return render(request, 'main/index.html', {'form': form})
def thanks(request):
from .forms import FileForm
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = FileForm(request.POST)
# check whether it's valid:
if form.is_valid():
global file_content
cd = form.cleaned_data['form']
writeFile(cd, 'calendar.txt')
file_content = cd
print(file_content)
else:
form = FileForm()
return render(request, 'main/index.html', {'form': form})
forms.py
from django import forms
global cd
from .views import file_content
content = file_content
def getContent():
global file_content
from .views import file_content
content = file_content
print(content + "FROM FORMS")
class FileForm(forms.Form):
getContent()
form = forms.CharField(label='',initial=content,widget=forms.Textarea(attrs={'width':"100%", 'cols' : "102", 'rows': "40", }))
Как вы можете сказать, в views.py
содержимое формы из текстовой области обрабатывается, а затем forms.py
импортирует его.Проблема в том, что это работает только при запуске, и класс FileForm
не получает информацию каждый раз, когда форма обновляется для отображения нового содержимого.Единственный способ, которым он «обновляется» сам по себе, - это когда я что-то изменяю в коде, и Django автоматически выполняет проверку системы.Мне не удалось найти эффективный способ заставить forms.py
понять, что в календаре было обновление.Есть ли способ сделать это?
Ссылка на исходный код проекта.