Django FileField:如何仅返回文件名(在模板中)

问题描述 投票:0回答:4

我的模型中有一个类型为

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

的东西
django django-templates django-file-upload
4个回答
227
投票

在您的模型定义中:

import os

class File(models.Model):
    file = models.FileField()
    ...

    def filename(self):
        return os.path.basename(self.file.name)

60
投票

您可以通过创建模板过滤器来做到这一点:

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 %}

3
投票

您还可以在模板中使用

cut
过滤器

{% for download in downloads %}
  <div class="download">
    <div class="title">{{download.file.filename|cut:'remove/trailing/dirs/'}}</div>
  </div>
{% endfor %}

-3
投票

您可以使用 name 属性从文件字段对象访问文件名。

class CsvJob(Models.model):

    file = models.FileField()

然后您可以使用以下命令获取特定对象的文件名。

obj = CsvJob.objects.get()
obj.file.name property
© www.soinside.com 2019 - 2024. All rights reserved.