我在这里问了一些与我正在处理的Django项目相关的问题,该项目以表单的形式显示文件的内容,您可以使用表单编辑文件,当您提交时,项目将写入文件并自动反映更改。
我怀疑这与文件“关闭”后由于某种原因仍保持打开状态有关。我试图通过为所有读写操作(也关闭文件)创建函数来解决这个问题,这样每次需要读写时都可以调用它们。这个问题仍然存在。有什么我做得不对吗?文件还在我找不到的地方吗?下面的资源。
链接到项目:
https://repl.it/@xMikee/Calendar
(
)
视图.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})
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", }))
索引.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 %}