Yuv*_*dam 28 django django-models
我有这个简化的模型:
class Item(models.Model):
name = models.CharField(max_length=120)
class ItemImage(models.Model):
image = models.ImageField(upload_to='upload_dir')
item = models.ForeignKey(Item)
Run Code Online (Sandbox Code Playgroud)
一个Item
可以有很多ItemImages
.我还有一个模板从视图中呈现以下数据集:
items = Item.objects.all()
Run Code Online (Sandbox Code Playgroud)
所以现在我想在模板中做这样的事情:
{% for item in items %}
<div>
{{ item.name }}<br>
<img src="{{ item.itemimage_set.all()[0] }}">
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
但显然这是不可能的.至少不是直接来自模板.
获取模板中第一个图像的正确方法是什么?
And*_*eev 54
{% with item.itemimage_set.all|first as image %}
<img src="{{ image.url }}" />
{% endwith %}
Run Code Online (Sandbox Code Playgroud)
ari*_*rie 13
或者您可以为Item
模型添加方法:
def get_first_image(self):
return self.itemimage_set.all()[0]
Run Code Online (Sandbox Code Playgroud)
然后在模板中调用此方法:
{{ item.get_first_image }}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用:
{{ item.itemimage_set.all.0 }}
Run Code Online (Sandbox Code Playgroud)
并获得第一个图像的网址:
<img src="{{ item.itemimage_set.all.0.url }}">
Run Code Online (Sandbox Code Playgroud)
虽然如果你需要更多的灵活性(在某些情况下不止一张图片等),最好写一个小模板标签.
一种可能的方法是迭代所有ItemImage
s,如下所示:
{% for item in items %}
<div>
{{ item.name }}<br>
{% for image in item.itemimage_set.all %}
<img src="{{ image.image.url }}">
{% endfor %}
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22336 次 |
最近记录: |