verbose_name floatfield float example db_column django django-file-upload

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