Ich habe ein Feld in meinem Typmodell FileField
. Dies gibt mir ein Objekt vom Typ File
, das die folgende Methode hat:
File.name
: Der Name der Datei einschließlich des relativen Pfads vonMEDIA_ROOT
.
Was ich will, ist so etwas wie " .filename
", das mir nur den Dateinamen und nicht auch den Pfad gibt, so etwas wie:
{% for download in downloads %}
<div class="download">
<div class="title">{{download.file.filename}}</div>
</div>
{% endfor %}
Welches würde so etwas geben myfile.jpg
S3
Speicher-Backend.Sie können dies tun, indem Sie einen Vorlagenfilter erstellen:
In
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)
Und dann in Ihrer Vorlage:
{% load filename %} {# ... #} {% for download in downloads %} <div class="download"> <div class="title">{{download.file|filename}}</div> </div> {% endfor %}
quelle
__init__.py
Datei nicht, um sicherzustellen, dass das Templatetags-Verzeichnis als Python-Paket behandelt wird.Sie können über das Dateifeldobjekt mit der Eigenschaft name auf den Dateinamen zugreifen.
class CsvJob(Models.model): file = models.FileField()
Dann können Sie den Dateinamen des jeweiligen Objekts mit abrufen.
obj = CsvJob.objects.get() obj.file.name property
quelle
obj.file.name
der gesamte Pfad im Medienverzeichnis zurückgegeben, z. B.tasks/132/foo.jpg
und nichtfoo.jpg
.