13

私はこのようなモデルを持っています:

class File(models.Model):
    name = models.CharField(max_length=45)
    description = models.CharField(max_length=100, blank=True)
    file = models.FileField(upload_to='files')

ビューですべての File オブジェクトを取得し、ファイルの種類に応じて、適切なクラスを出力したいと思います。

<a class="pdf">link</a>

また

<a class="word">link</a>

また

<a class="other">link<a/>

私のテンプレートで。

Djangoテンプレートでファイル拡張子を取得するにはどうすればよいですか?

私はこのようなことをしたいと思います:

{% for file in files %}
    {% if file.get_extension == 'pdf' %}
           <a class="pdf">link</a>
    {% elif file.get_extension = '.doc' %}
           <a class="word">link</a>
    {% else %}
           <a class="other">link<a/>
    {% endif %}
{% endfor %}

もちろん、「file.get_extension」は存在しません...

4

2 に答える 2

43

モデルにがありませ.get_extensionんか?それは簡単です。追加するだけです:-) モデルにはあらゆる種類のメソッドを含めることができます。だから、このようなもの:

class File(models.Model):
    name = models.CharField(max_length=45)
    description = models.CharField(max_length=100, blank=True)
    file = models.FileField(upload_to='files')

    def extension(self):
        name, extension = os.path.splitext(self.file.name)
        return extension

(名前.extension()は、btwよりもpythonicです.get_extension())。

さらに先に進むことができます。テンプレートの if/else 構造は少し面倒ではありませんか? Python コードではそれほど面倒ではありません。

class File(models.Model):
    ...
    def css_class(self):
        name, extension = os.path.splitext(self.file.name)
        if extension == 'pdf':
            return 'pdf'
        if extension == 'doc':
            return 'word'
        return 'other'

テンプレートは次のように簡単です。

{% for file in files %}
  <a class="{{ file.css_class }}">link</a>
{% endfor %}
于 2012-11-19T14:21:11.903 に答える
6

これを行うための気の利いた組み込みのdjango関数があるかどうかはわかりませんが、ファイルフィールドから拡張子を取得できます

fileName, fileExtension = os.path.splitext(file.name)

テンプレートでこれを行うことに設定されている場合は、これをラップするカスタム タグを作成できます。

https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

于 2012-11-19T13:50:33.203 に答える