Python Django 模板无法从模型函数中获取名称
Posted
技术标签:
【中文标题】Python Django 模板无法从模型函数中获取名称【英文标题】:Python Django Template cannot get name from model function 【发布时间】:2017-02-27 13:31:45 【问题描述】:虽然我知道我可以从我们的模型中调用函数定义,但我似乎无法提取上传文档的文件名。下面我尝试了以下模板格式,但要么是我想要的输出结果:
.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
对我也不起作用?谢谢!
【问题讨论】:
更好的方法是创建template tag
而不是编辑模型。检查上述答案中的 [SO Post][1]。您将找到有关创建模板标签的答案。 [1]:***.com/questions/2683621/…
【参考方案1】:
我认为您与 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 来获取其值。
来源:django filefield return filename only in template
【讨论】:
谢谢!这是正确答案!我会阅读您刚刚链接的参考资料! 哦,我现在明白了。这就是让我在模特下感到困惑的地方!再次感谢!以上是关于Python Django 模板无法从模型函数中获取名称的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 django rest 框架在模板中获取模型选择字段名称而不是 id
在 django 模板中使用聚合 QuerySet 中的字段