floatfield - django filefield return filename nombre solo en la plantilla
float en django (3)
En la definición de tu modelo:
import os
class File(models.Model):
file = models.FileField()
...
def filename(self):
return os.path.basename(self.file.name)
Tengo un campo en mi modelo de tipo FileField. Esto me da un objeto de tipo tipo Archivo, que tiene el siguiente método:
File.name: el nombre del archivo que incluye la ruta relativa desde MEDIA_ROOT.
Lo que quiero es algo como .filename que solo me dará el nombre de archivo y no la ruta también
algo como:
{% for download in downloads %}
<div class="download">
<div class="title">{{download.file.filename}}</div>
</div>
{% endfor %}
que daría algo como myfile.jpg
Gracias
Puede acceder al nombre de archivo desde el objeto de campo de archivo con la propiedad del nombre.
class CsvJob(Models.model):
file = models.FileField()
entonces puedes obtener el nombre de archivo de los objetos particulares utilizando.
obj = CsvJob.objects.get()
obj.file.name property
Puedes hacer esto creando un filtro de plantilla:
En 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)
Y luego en tu plantilla:
{% load filename %}
{# ... #}
{% for download in downloads %}
<div class="download">
<div class="title">{{download.file|filename}}</div>
</div>
{% endfor %}