我正在研究从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')
答案 0 :(得分:4)
我不明白为什么你在这里继续谈论模板,模板与任何事情都没有任何关系。与所有逻辑一样,上传的处理在视图中完成。
file upload overview仍然拥有您需要的所有信息。您可以忽略关于Django表单的部分并检查它是否有效,只需将文件对象传递给您的上传处理函数,该页面也会解释。
但是,您需要更改模板,以便表单元素使用POST而不是GET(这几乎肯定是一个好主意),并使用enctype="multipart/form-data"
,如该页面上所述。
最后,我真的建议你重写代码以使用ModelForms。它不仅可以使您的代码更简单,它还可以执行诸如验证条目以确保所有必需字段都存在且具有正确类型等等 - 以及输出有效HTML(例如,您'{1}}代码中缺少for
个属性。