我的FileField类型的模型中有一个字段。这给了我一个类型为File的对象,它有以下方法:
File.name:文件名,包括MEDIA_ROOT的相对路径。
我想要的是类似.filename的东西,它只会给我文件名,而不是路径
类似的东西:
{% for download in downloads %}
<div class="download">
<div class="title">{{download.file.filename}}</div>
</div>
{% endfor %}
会给出像myfile.jpg
这样的东西感谢
答案 0 :(得分:117)
在您的模型定义中:
import os
class File(models.Model):
file = models.FileField()
...
def filename(self):
return os.path.basename(self.file.name)
答案 1 :(得分:43)
您可以通过创建模板过滤器来执行此操作:
在myapp/templatetags/filename.py
:
import os
from django import template
register = template.Library()
@register.filter
def filename(value):
return os.path.basename(value.file.name)
然后在你的模板中:
{% load filename %}
{# ... #}
{% for download in downloads %}
<div class="download">
<div class="title">{{download.file|filename}}</div>
</div>
{% endfor %}
答案 2 :(得分:-1)
您可以使用name属性从文件字段对象访问文件名。
class CsvJob(Models.model):
file = models.FileField()
然后您可以使用获取特定对象的文件名。
obj = CsvJob.objects.get()
obj.file.name property