Я задал здесь несколько вопросов, связанных с проектом Django, над которым я работаю, который отображает содержимое файла в форме, и вы можете редактировать файл с помощью формы, когда вы отправляете его, проект записывает в файл и изменения автоматически отражаются.
Итак, я получил проект для отображения содержимого текстового файла календаря в форме, и я смог получить содержимое формы в своем скрипте Python для манипуляции. У меня проблема с записью этого содержимого в файл, потому что по какой-то причине изменения никогда не вступают в силу до тех пор, пока я не перезапущу сервер (это не идеально, так как он должен работать непрерывно).
Я подозреваю, что это как-то связано с тем, что файл по какой-то причине остается открытым после того, как он "закрыт". Я попытался исправить это, создав функции для всех операций чтения и записи (которые также закрывают файл), чтобы я мог вызывать их каждый раз, когда мне нужно для чтения / записи. Проблема все еще сохраняется. Есть ли что-то, что я делаю здесь неправильно? Файл все еще открыт где-то, что я не могу найти? Ресурсы ниже.
Ссылка на проект: https://repl.it/@xMikee/Calendar ( календарь на данный момент является просто шаблоном )
views.py
from django.shortcuts import render
from django.contrib import messages
from .forms import FileForm
import sys
f = open('calendar.txt', "r")
file_content = f.read()
f.close()
if f.closed:
print("CLOSED FILE from read views")
def writeFile(content, file):
f = open(file, "w")
f.write(content)
f.close()
if f.closed:
print("CLOSED FILE from write views")
def home(request):
return render(request, 'main/index.html',{'file_content':file_content})
def form_get(request):
print('got form')
if request.method == 'POST':
print("OK")
# 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():
print("OK")
cd = form.cleaned_data['form']
writeFile(cd, 'calendar.txt')
else:
print('NOT OK')
form = FileForm()
return render(request, 'main/index.html', {'form': form})
def thanks(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
print("OK")
# 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():
print("OK")
cd = form.cleaned_data['form']
print(cd)
f = open('calendar.txt', 'r+')
f.write(cd)
f.close()
else:
print('NO POST')
form = FileForm()
return render(request, 'main/index.html', {'form': form})
forms.py
from django import forms
global cd
f = open('calendar.txt', "r")
file_content = f.read()
f.close()
if f.closed:
print("CLOSED FILE from read views")
class FileForm(forms.Form):
form = forms.CharField(label='',initial=file_content,widget=forms.Textarea(attrs={'width':"100%", 'cols' : "102", 'rows': "40", }))
index.html
{% extends "base.html" %}
{% block content %}
<h1 style='text-align:center'>Welcome to the calendar!</h1>
<div style='text-align:center'>
<form action="#" method="post">
{% csrf_token %}
{{ form }}
<div style='margin: 0 auto'>
<input type="submit" value="Submit">
</div>
</form>
<p>{{cd}}</p>
</div>
{% endblock content %}