虽然我知道我可以从模型中调用函数定义,但我似乎无法提取上传文档的文件名。下面我尝试了以下模板格式,但要么是我想要的输出结果:
.html版本1
<form action="." method="GET">
{% if documents %}
<ul>
{% for document in documents %}
<li> {{ document.docfile.filename }}
<input type = "submit" name="load-data" value="Add to Layer"/>
</li>
{% endfor %}
</ul>
结果:它只显示按钮。
.html第2版
<form action="." method="GET">
{% if documents %}
<ul>
{% for document in documents %}
<li> {{ document.filename }}
<input type = "submit" name="load-data" value="Add to Layer"/>
</li>
{% endfor %}
</ul>
结果:它只显示按钮。
.html第3版
<form action="." method="GET">
{% if documents %}
<ul>
{% for document in documents %}
<li> {{ document.docfile.name }}
<input type = "submit" name="load-data" value="Add to Layer"/>
</li>
{% endfor %}
</ul>
结果:打印完整的路径名(例如:/documents/2016/10/08/filename.csv)和按钮
这是我的其余代码:
models.py
class Document(models.Model):
docfile = models.FileField(upload_to='document/%Y/%m/%d')
def filename(self):
return os.path.basename(self.file.name)
views.py
documents = Document.objects.all()
return render(request, 'gridlock/upload-data.html',
{
'documents' : documents,
'form': form
})
我希望有人可以解释为什么我尝试的一切:
{{ document.docfile.filename }}
或{{document.file.filename}}
或{{document.filename}}
对我来说不起作用?谢谢!
答案 0 :(得分:4)
我认为你与{{ document.filename }}
非常接近,除了你需要改变的模型
def filename(self):
return os.path.basename(self.file.name)
到
def filename(self):
# try printing the filename here to see if it works
print (os.path.basename(self.docfile.name))
return os.path.basename(self.docfile.name)
在模型中,该字段称为docfile,因此您需要使用self.docfile来获取其值。