问题
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 fromMEDIA_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
回答1:
In your model definition:
import os
class File(models.Model):
file = models.FileField()
...
def filename(self):
return os.path.basename(self.file.name)
回答2:
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 %}
回答3:
You can access the filename from the file field object with the name property.
class CsvJob(Models.model):
file = models.FileField()
then you can get the particular objects filename using.
obj = CsvJob.objects.get()
obj.file.name property
来源:https://stackoverflow.com/questions/2683621/django-filefield-how-to-return-filename-only-in-template