Переменные не обновляются из импортированной переменной в Django? - PullRequest
0 голосов
/ 28 сентября 2018

Я столкнулся с интересным препятствием в моей программе 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 понять, что в календаре было обновление.Есть ли способ сделать это?

Ссылка на исходный код проекта.

...