我正在使用Django
为我的网站准备图像库。我的Image Model
基本上有一个Gallery Model Foreign Key
。我的Image
型号中有一个BooleanField
来制作封面照片。
我需要的是要获得图像之间的一个真实价值。
{% for gallery in gallery_list %}
<div class="grid-item {{ choices | random }}">
<a href="#" data-background="{{gallery.images}}#howtofilter?#" data-rel="lightcase:gal" title="Image Caption"></a>
</div>
{% endfor %}
我检查了试图解决的自定义过滤器的文档,但我找不到。你能帮我吗?
谢谢
ps编辑:添加我的模型
class Gallery(models.Model):
title = models.CharField(max_length=200,verbose_name=_("gallery_title"),help_text _("Enter the Gallery title"))
class Image(models.Model):
title = models.CharField(max_length=200,verbose_name=_("image_title"),help_text _("Enter the Image title"))
gallery = models.ManyToManyField(Gallery)
is_cover_photo = models.BooleanField()
您可以在Gallery
模型中编写一种方法来返回封面图像:
class Gallery(models.Model):
# other fields
def cover_image(self):
return self.image_set.filter(is_cover_photo=True).first()
然后在模板中:
{% for gallery in gallery_list %}
{% with cover=gallery.cover_image %}
{% if cover %}
{# do something with cover image #}
{% endif %}
{% endwith %}
{% endfor %}
在模板之外保持这样的复杂逻辑是很好的,以避免它们变得太复杂。将其保存在视图和/或模型!
中听起来最好的选择是在Gallery
型号上使用一种方法来获取具有封面图像的Image
。类似:
class Gallery
...model fields...
def get_cover_image(self):
return self.images_set.filter(cover_photo=True).first()
然后在模板中,假设Image
模型具有url
的属性:
{% for gallery in gallery_list %}
<div class="grid-item {{ choices | random }}">
<a href="#" data-background="{{gallery.get_cover_image.url}}" data-rel="lightcase:gal" title="Image Caption"></a>
</div>
{% endfor %}
要保存许多数据库查询,您可能需要/想使用prefetch_related
获取所有Image
对象,您需要显示画廊,但这是另一个问题。