我在Django中有一个包含字符串字段的查询集。这是文件名,类似于images/photo.jpg
或images/photo.20.19.22.jpg
。我需要在一个特定的视图中重写它们,以便在扩展名之前插入“ .thumbnail”。先前的名称应分别为images/photo.thumbnail.jpg
和images/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]))
答案 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 %}