2012-11-19 17 views
5

Ich habe Modell wie folgt aus:Erste Dateierweiterung in Django Vorlage

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

ich alle Datei-Objekte aus meiner Sicht und nach der Art der Datei, würde Ich mag sinnvoll, eine Klasse drucken:

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

oder

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

oder

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

in meiner Vorlage.

Wie kann ich Dateierweiterung in Django-Vorlage bekommen?

Ich möchte some wie dies zu tun:

{% 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 %} 

Natürlich ‚file.get_extension‘ existiert nicht ...

Antwort

17

wickelt? Das ist einfach, füge es einfach hinzu :-) Du kannst alle möglichen Methoden auf einem Modell haben. So etwas wie folgt aus:

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 

(Der Name .extension() mehr pythonic als .get_extension() ist, btw).

können Sie sogar noch weiter gehen. Ist die If/Else-Struktur in Ihrer Vorlage nicht langweilig? Es ist weniger umständlich in Python-Code:

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' 

Die Vorlage ist einfacher auf diese Weise:

{% for file in files %} 
    <a class="{{ file.css_class }}">link</a> 
{% endfor %} 
2

Ich weiß nicht, ob es ein geschicktes ist gebaut in django Funktion, dies zu tun, aber Sie können die Erweiterung von Ihrem Filefield

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

bekommen Wenn Sie tun dies in der Vorlage festgelegt sind, können Sie erstellen ein eigener Tag, das dies ein .get_extension auf Ihrem Modell Sie verpassen

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