要在Django模板中更改字符串吗?

时间:2019-02-09 16:09:11

标签: django django-templates

我在Django中有一个包含字符串字段的查询集。这是文件名,类似于images/photo.jpgimages/photo.20.19.22.jpg。我需要在一个特定的视图中重写它们,以便在扩展名之前插入“ .thumbnail”。先前的名称应分别为images/photo.thumbnail.jpgimages/photo.20.19.22.thumbnail.jpg

做到这一点的最佳方法是什么?这是查询集的一部分,因此看起来像:

{% for record in list %}
  {{ record.image }}
{% endfor %}

现在,我当然愿意在模板之外进行此操作。但是,我没有找到可以做到这一点的方法。毕竟,这需要对我的查询集中的每条记录进行。使事情复杂化的是,该记录并非直接来自模式。该记录来自子查询,因此我看不到更改模态本身的方法。我应该为此使用模板标签吗?还有其他建议吗?

仅供参考,子查询如下:

>>> from django.db.models import OuterRef, Subquery
>>> newest = Comment.objects.filter(post=OuterRef('pk')).order_by('-created_at')
>>> Post.objects.annotate(image=Subquery(newest.values('image')[:1]))

1 个答案:

答案 0 :(得分:3)

一个简单的custom template filter可以做到这一点。

@register.filter
def add_thumbnail(image):
    return image.replace('.jpg', 'thumbnail.jpg')

在模板中:

{% for record in list %}
  {{ record.image|add_thumbnail }}
{% endfor %}