タイプ FileField
のモデルにフィールドがあります。これにより、タイプ File
のオブジェクトが得られます。これには次のメソッドがあります。
File.name
:MEDIA_ROOT
からの相対パスを含むファイルの名前。
私が欲しいのは、「.filename
」のようなもので、パスではなくファイル名のみを提供します。
{% for download in downloads %}
<div class="download">
<div class="title">{{download.file.filename}}</div>
</div>
{% endfor %}
myfile.jpg
のようなものが得られます
モデル定義で:
import os
class File(models.Model):
file = models.FileField()
...
def filename(self):
return os.path.basename(self.file.name)
これを行うには、テンプレートフィルターを作成します。
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)
そして、テンプレートで:
{% load filename %}
{# ... #}
{% for download in downloads %}
<div class="download">
<div class="title">{{download.file|filename}}</div>
</div>
{% endfor %}
Nameプロパティを使用して、ファイルフィールドオブジェクトからファイル名にアクセスできます。
class CsvJob(Models.model):
file = models.FileField()
次に、を使用して特定のオブジェクトのファイル名を取得できます。
obj = CsvJob.objects.get()
obj.file.name property