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