J'ai un champ dans mon modèle de type FileField
. Cela me donne un objet de type File
, qui a la méthode suivante:
File.name
: Le nom du fichier, y compris le chemin relatif deMEDIA_ROOT
.
Ce que je veux, c'est quelque chose comme ".filename
"qui ne me donnera que le nom du fichier et non le chemin aussi, quelque chose comme:
{% for download in downloads %}
<div class="download">
<div class="title">{{download.file.filename}}</div>
</div>
{% endfor %}
Ce qui donnerait quelque chose comme myfile.jpg
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)
Vous pouvez le faire 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)
Et puis dans votre modèle:
{% load filename %}
{# ... #}
{% for download in downloads %}
<div class="download">
<div class="title">{{download.file|filename}}</div>
</div>
{% endfor %}
Vous pouvez accéder au nom de fichier à partir de l'objet champ de fichier avec la propriété name.
class CsvJob(Models.model):
file = models.FileField()
alors vous pouvez obtenir le nom de fichier des objets particuliers en utilisant.
obj = CsvJob.objects.get()
obj.file.name property