访问使用FileField Django上传的文件

时间:2017-11-06 16:35:39

标签: python django forms file-upload filefield

我正在尝试创建一个带有文件字段的Django表单,以便根据模型上传pdf。

#models.py
class ProductionRequest(models.Model):
     ...
     contract_file = models.FileField('Contract file (PDF)', upload_to='contracts/')
     ...

我可以上传文件并将其保存在我的对象中,但是当我尝试使用此代码在我的模板中显示该文件时

 {{ prod_req.contract_file }}

它只显示文件的路径 “合同/ file_uploaded.pdf”。如何创建链接以下载(或在新选项卡中打开)文件?

另外:当我尝试从Django admin打开文件时,使用此链接

合同文件(PDF):目前:contracts / file_uploaded.pdf

我没有给我看文件,我得到了这个:

Page not found (404) Request URL: http://127.0.0.1:8000/admin/appname/productionrequest/1/change/contracts/file_uploaded.pdf/change/

如何访问我的文件?

1 个答案:

答案 0 :(得分:0)

它就像一个Python文件。所以,你刚刚引用文件对象的方式。

要获取文字,您需要使用f.read()。因此,在您的模板中,而不是

{{ prod_req.contract_file }}

使用

{{ prod_req.contract_file.read }}

但请注意,调用read会将光标移动到文件末尾。第一次在文件上调用read时,它会返回所有文本。第二次,它什么也没有返回。如果您需要两次文本,这只是一个问题,但在这种情况下,将文本直接存储在上下文对象上。

如果有什么不清楚,请告诉我。