0

我正在研究从 html 模板上传文件。我看过很多文档,包括 FileFields、ImageFields 等。但是,理想情况下我不想重写我的代码。目前,我的模板上有一个简单的表单,我想在那里有一个上传功能,在那里,一张图片将被上传并存储到我的应用程序媒体文件夹中,如果可能的话,还可以添加到数据库中。

我确实知道我可能走了一条漫长而复杂的路线,但如果有人能提供帮助,那就太好了!

html.py:

<div class="row">                 <div class="span1 offset5">                 </bR>
              <form class="form-horizontal" method="get" action="/add/submit" value="add">  
              <fieldset>              <div class="input">
              <div class="inline-inputs">
              <label>Ride Name:</label><input type="text" name="name">
              <label>Type:</label><input type="text" name="type">
              <label>Theme:</label><input type="text" name="theme">
              <label>Description:</label><textarea rows="5" name ="description"></textarea>
              <label>Author:</label><input type="text" name="author">

              <label>Date Released:</label>
              <div id="datetimepicker" class="input-append date">
                  <input type="text" name="date"></input>
                  <span class="add-on">
                  <i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
                  </span>
              </div>                      
              <label>Thread:</label><input type="text" name="thread">
              <label>Video</label><textarea rows="2" name ="video"></textarea>


                  <br><br>
                  <input class="btn btn-primary" type="submit" value="Add" />
                  </div>              </div>                      

               </fieldset> 
              </form>  
              </div>  </div>

目前我的 Views.py 只是获取输入的数据并将其插入数据库。我想添加要上传文件的功能:

def Ride_Add_Submit(request):
    name = request.GET['name']
    type = request.GET['type']
    theme = request.GET['theme']
    description = request.GET['description']
    author = request.GET['author']
    releasedate=request.GET['date']
    video=request.GET['video']
    thread=request.GET['thread']


    entry = RollerCoaster(name=name, type=type, theme=theme, description=description, releasedate=releasedate, author=author, video=video, thread=thread)
    entry.save()
    return TemplateResponse(request, 'Ride_Add.html')
4

1 回答 1

4

我不明白你为什么一直在这里谈论模板,模板与任何事情都没有任何关系。像所有逻辑一样,上传的处理是在视图中完成的。

文件上传概述仍然包含您需要的所有信息。您可以忽略有关 Django 表单的部分并检查它是否有效,只需将文件对象传递给您的上传处理函数,该页面也对此进行了说明。

但是,您将需要更改您的模板,以便表单元素使用 POST 而不是 GET(无论如何这几乎肯定是一个好主意),并enctype="multipart/form-data"按照该页面上的描述使用。

最后,我真的建议您重写代码以使用 ModelForms。它不仅会让你的代码更简单,它还会做一些事情,比如验证条目以确保所有必需的字段都存在并且是正确的类型,等等 - 以及输出有效的 HTML(例如,你'标签中缺少for属性)。label

于 2013-02-25T14:04:06.577 回答