如何在django中将字典新条目渲染为表格的新行?

时间:2019-06-17 10:52:10

标签: python django file-upload django-templates

一开始我似乎很难实现一些困难。更具体地说,我想将文件上传到文件夹中并重命名。重命名之后,我想在包含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)上看到了下载按钮,并且当我上传文件时,没有任何显示。有谁知道我该如何解决这个问题?感谢您能提供的任何帮助

1 个答案:

答案 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