Ответ 1
В определении модели:
import os
class File(models.Model):
file = models.FileField()
...
def filename(self):
return os.path.basename(self.file.name)
У меня есть поле в моей модели типа 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
В определении модели:
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 %}
Вы можете получить доступ к имени файла из объекта поля файла с его именем.
class CsvJob(Models.model):
file = models.FileField()
то вы можете получить имя файла с конкретными объектами.
obj = CsvJob.objects.get()
obj.file.name property