2012-11-19 291 views
5

我有模式是這樣的:獲取文件擴展名

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

我得到的所有的文件對象在我看來,並根據文件的類型,我想打印相應的類:

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

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

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

在我的模板中。

如何在Django模板中獲得文件擴展名?

我想這樣做somethink這樣的:

{% 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」不存在...

回答

17

自定義標籤你錯過了你的模型.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().get_extension()更Python,順便說一句)。

你可以走得更遠。難道你的模板中的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 %}