我最近因为我的django项目而遇到了一个奇怪的问题,我想和你分享这个问题。好吧,在我的项目中,我想让用户有可能更新他之前上传的文本文件的内容,为此,我考虑将文件的内容复制到textarea,在那里进行修改,并在提交修改后,更新文件。事实上,我在这个论坛中找到了这个解决方案,它将更新保存到另一条路径!这是建议的解决方案:
views.py:
def update_file(request, id):
file = UploadedFile.objects.get(pk=id)
if request.method == "POST":
from django.core.files import File
f = open(file.docfile.path,'w+b')
content = request.POST['content']
f.write(content)
file.docfile = File(f)
file.save()
return HttpResponseRedirect('/home/')
else:
docfile = file.docfile.read()
return render_to_response('update_file.html',{'file':file, 'docfile' :
docfile}, context_instance=RequestContext(request))
update_file.html:
<form action="/update_file/{{file.id}}/" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p><textarea name="content">
{{docfile}}
</textarea></p>
<p><input type="submit" value="Enregistrer"/></p>
</form>
当我运行此代码时,我在屏幕上打印文本,正常更新并将其保存回数据库,但在不同的路径中,例如,包含文件的路径为:“media / documents / username /“,但在修改文件后,它将保存在以下目录中:”documents / username // home / Ubuntu-user / file_sharing_project / file_sharing_project / media / documents / username /“等因此路径以递归方式变化!关于这个问题的任何线索,对于记录,我只是django和python中的初学者!
答案 0 :(得分:1)
如果您查看https://docs.djangoproject.com/en/dev/ref/files/file/处的文档 它说它不会替换文件而是创建一个新文件。
所以你可以在这里采取措施, 销毁旧文件,你可以新建一个。
或者只是保存了所有这些内容,用户可能还希望在某个时间点看到旧版本。
此外,您可能还想考虑在完成文件后关闭文件。