web-dev-qa-db-ja.com

Django FileField:ファイル名のみを返す方法(テンプレート内)

タイプ FileField のモデルにフィールドがあります。これにより、タイプ File のオブジェクトが得られます。これには次のメソッドがあります。

File.nameMEDIA_ROOTからの相対パスを含むファイルの名前。

私が欲しいのは、「.filename」のようなもので、パスではなくファイル名のみを提供します。

{% for download in downloads %}
  <div class="download">
    <div class="title">{{download.file.filename}}</div>
  </div>
{% endfor %}

myfile.jpgのようなものが得られます

55
John

モデル定義で:

import os

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

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

これを行うには、テンプレートフィルターを作成します。

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 %}
44
rz.

Nameプロパティを使用して、ファイルフィールドオブジェクトからファイル名にアクセスできます。

class CsvJob(Models.model):

    file = models.FileField()

次に、を使用して特定のオブジェクトのファイル名を取得できます。

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