一开始我似乎很难实现一些困难。更具体地说,我想将文件上传到文件夹中并重命名。重命名之后,我想在包含3列的表格中显示一行。第一栏应显示文件的旧名称,第二栏应显示文件的新名称,然后第三栏应显示下载按钮。我希望表格为我上传的每个文件显示此内容(例如,如果我已上传5个文件,我想在表格中看到5行),这是我的upload_file
视图:
def upload_file(request):
filedict = {}
oldname = ""
newname = ""
if request.method == 'POST':
uploaded_file = request.FILES['document']
fs=FileSystemStorage()
oldname = fs.save(uploaded_file.name,uploaded_file)
newname = "new"+oldname
global counter
filedict['counter'] = { 'oldname': oldname, 'newname' : newname }
counter+=1
return render(request, 'files/renamefiles.html',{'names':
filedict})
这是我的模板renamefiles.html
中的表:
<div class="mt-5">
<table class="table table-hover">
<thead>
<tr>
<th scope="col">Source File</th>
<th scope="col">Renamed File</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
<tr>
{% for key, entry in dictionary.items %}
{% for key2, data in entry.items %}
<th id="filedata">{{data}}</th>
{% endfor%}
{% endfor%}
<th><a class="btn btn-sm btncolor">Download File</a></th>
</tr>
</tbody>
</table>
</div>
尽管如此,当我加载页面时,我在第一列(列Source File
)上看到了下载按钮,并且当我上传文件时,没有任何显示。有谁知道我该如何解决这个问题?感谢您能提供的任何帮助
答案 0 :(得分:0)
对于每个上载的文件,您都需要其他模型和数据库中的条目。这样,即使重新启动服务器后,表中也会有条目(字典仅在RAM中)。
创建这样的模型:
class UploadedFile(Model):
file = FileField(...)
orig_filename = CharField(max_length=500)
然后您可以在视图中使用ModelForm,或创建模型对象而无需更改很多现有代码。
您将使用基于该模型的常规ListView,而不是使用字典来呈现表。
文档的这一部分应该使您入门: https://docs.djangoproject.com/en/2.2/topics/http/file-uploads/#handling-uploaded-files-with-a-model