Django 过滤器标签不起作用:属性错误在 / 'str' 对象没有属性 'filter_function



根据下面的文档模型,模板中的"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"更改为"文件名"。 它现在正在工作。 这是一个非常有线的情况。

最新更新