django filefield возвращает имя файла только в шаблоне

У меня есть поле в моей модели типа FileField. Это дает мне объект типа type File, который имеет следующий метод:

файл.имя: имя файла, включая относительный путь от MEDIA_ROOT.

то, что я хочу, это что-то вроде .имя файла, которое даст мне только имя файла, а не путь, а

что-то типа:

{% for download in downloads %}
    <div class="download">
        <div class="title">{{download.file.filename}}</div>
    </div>
{% endfor %}

что даст что-то вроде myfile.формат JPG

спасибо

3 ответов


в определении модели:

import os

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

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

вы можете сделать это, создав шаблон фильтра:

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

вы можете получить доступ к имени файла из объекта file field со свойством name.

class CsvJob(Models.model):

    file = models.FileField()

затем вы можете получить имя файла конкретных объектов, используя.

obj = CsvJob.objects.get()
obj.file.name property