django filefield仅在模板中返回文件名

时间:2010-04-21 14:09:40

标签: django django-file-upload

我的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

这样的东西

感谢

3 个答案:

答案 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