Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django FileField: How to return filename only (in template)

I've got a field in my model of type FileField. This gives me an object of type File, which has the following method:

File.name: The name of the file including the relative path from MEDIA_ROOT.

What I want is something like ".filename" that will only give me the filename and not the path as well, something like:

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

Which would give something like myfile.jpg

like image 387
John Avatar asked Apr 21 '10 14:04

John


2 Answers

In your model definition:

import os  class File(models.Model):     file = models.FileField()     ...      def filename(self):         return os.path.basename(self.file.name) 
like image 79
Ludwik Trammer Avatar answered Sep 18 '22 14:09

Ludwik Trammer


You can do this by creating a template filter:

In 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) 

And then in your template:

{% load filename %}  {# ... #}  {% for download in downloads %}   <div class="download">       <div class="title">{{download.file|filename}}</div>   </div> {% endfor %} 
like image 39
rz. Avatar answered Sep 19 '22 14:09

rz.