102 votes

Django FileField: Comment retourner uniquement le nom de fichier (dans le modèle)

J'ai un champ dans mon modèle de type FileField. Cela me donne un objet de type File, qui possède la méthode suivante :

File.name: Le nom du fichier incluant le chemin relatif à partir de MEDIA_ROOT.

Ce que je veux, c'est quelque chose comme ".filename" qui me donnera seulement le nom du fichier et pas le chemin aussi, quelque chose comme :

{% for download in downloads %}

    {{download.file.filename}}

{% endfor %}

Ce qui donnerait quelque chose comme myfile.jpg

230voto

Ludwik Trammer Points 7794

Dans la définition de votre modèle :

import os

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

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

60voto

rz. Points 7261

Vous pouvez faire cela en créant un filtre de modèle :

Dans 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)

Ensuite dans votre modèle :

{% load filename %}

{# ... #}

{% for download in downloads %}

      {{download.file|filename}}

{% endfor %}

3voto

Olaleye Abiola Points 21

Vous pourriez également utiliser le cut filtre dans votre modèle

{% for download in downloads %}

    {{download.file.filename|cut:'remove/trailing/dirs/'}}

{% endfor %}

0voto

Greg Kaleka Points 791

Une solution moderne utilisant Pathlib:

 from pathlib import Path

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

     def filename(self):
         return Path(self.file.name).name

-3voto

DeadDjangoDjoker Points 150

Vous pouvez accéder au nom du fichier à partir de l'objet de champ de fichier avec la propriété name.

class CsvJob(Models.model):

    file = models.FileField()

ensuite, vous pouvez obtenir le nom du fichier particulier en utilisant.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X