根据下面的文档模型,模板中的"document.upload.name"将显示为"user_NAME/微笑.jpg"。
我想将"user_NAME/微笑.jpg"拆分为"/"。所以在模板中,它只会显示"微笑.jpg"。
我在"upload_extras"的过滤器中使用"value.split"。但错误是:"str"对象没有属性"filter_function"。
这是模板:
<td><a href="{{ document.upload.url }}" target="_blank">{{
document.upload.name|filename_extract }}</a></td>
这是我在upload_extras.py的功能
#upload_extras.py
from Django import template
register =template.Library
@register.filter('filename_extract')
def filename_extract(value):
'''extract the file name from the upload_to_path'''
folder, filename = value.split('/')
return filename
最后一个是模型:
# Create your models here.
def upload_to_path(instance, filename):
return 'user_{0}/{1}'.format(instance.user.username, filename)
class Document(models.Model):
uploaded_at = models.DateTimeField(auto_now_add=True)
upload = models.FileField(upload_to=upload_to_path)
user = models.ForeignKey(User, on_delete=models.CASCADE)
您需要在模板中加载自定义筛选器。
在模板顶部,添加
{% load upload_extras %}
from django import template
register = template.Library()
@register.filter('filename')
def filename(value):
folder, filename=value.split("/")
return filename
我将函数名称从"filename_extract"更改为"文件名"。 它现在正在工作。 这是一个非常有线的情况。