所以基本上我想知道如何使用for循环在django模板中索引图像。我们的想法是使用用户添加到模型中的前三个图像创建幻灯片放映
model.py
class Product(models.Model):
Name=models.CharField(max_length=120,null=True,blank=True)
Category=models.CharField(max_length=80,null=True,blank=True)
Image=models.ImageField(null=True,upload_to='Image')
Description=models.TextField(null=True,blank=True)
Price=models.DecimalField(default=0.00,max_digits=10,decimal_places=2)
Delivery_date=models.DateTimeField(null=True,blank=True)
Delivered=models.BooleanField(default=False)
这是模板,但obj.Image.url
标签不完整,因为我只想要前三个项而不是循环但列出
{% for obj in object_list %}
{% if obj.Image %}
<ul class="pgwSlider">
<li><img src="{{ obj.Image.url }}"></li>
<li>
<img src="">
<span>Shanghai, China</span>
</li>
</ul>
{% endif %}
{% endfor %}
答案 0 :(得分:1)
如果您只想要3张图片(也许是最新图片,右图),您只需将自己的图片上下文从视图传送到模板。
也许您正在使用ListView
,然后您必须使用get_context_data
传递其他上下文数据。
这是get_context_data
的简单用法。如果您想了解更多信息,可以查看django official documents for simple mixins(官方文档非常有用!)
您的视图示例
...
def get_context_data(self, **kwargs):
context = super(YourListView).get_context_data(**kwargs)
context['top_three_images'] = [
product.Image.url
for product in Product.objects.exclude(Image=None)[:3]
]
return context
您可以使用自己的代码而不是列表理解。
然后您只需在模板中使用top_three_images
即可。
您的模板
{% for image_url in top_three_images %}
<img src="{{ image_url}}" alt="">
{% endfor %}
P.S。我建议您使用以lower_case开头的模型字段(即
name
,category
,image
...)
你想在循环中只显示前三个图像,对吗?
如果我理解正确,我认为foorloop.coutner
可能会有所帮助。
在html中,您可以使用{% if forloop.counter < 4 %}
(forloop以1
开头)
{% for obj in object_list %}
{% if forloop.counter < 4 %}
<ul class="pgwSlider">
<li><img src="{{ obj.Image.url }}"></li>
<li>
<img src="">
<span>Shanghai, China</span>
</li>
</ul>
{% endif %}
{% endfor %}
希望有所帮助。
答案 1 :(得分:0)
好吧我在模板标签的帮助下解决了这个问题。基本上我创建了
from django import template
from Products.models import Product
register=template.Library()
@register.filter
def id_check(value,arg):
arg=arg+value
context=Product.objects.get(id=arg)
return context.Image.url
并且只在模板中运行了一个循环
{% for obj in object_list %}
{% if forloop.first %}
<ul class="pgwSlider">
<li><img src="{{ obj.id|id_check:0}}" alt="Montral, QC, Canada" data-large-src="{{ obj.id|id_check:1}}"></li>
<li><img src="{{ obj.id|id_check:1}}" alt="Canada" data-large-src="{{ obj.id|id_check:2}}" ></li>
<li><img src="{{obj.id|id_check:2}}" alt="Montral, QC, Canada" data-large-src="{{ obj.id|id_check:10}}"></li>
<li><img src="{{ obj.id|id_check:3}}" alt="Canada" data-large-src="{{ obj.id|id_check:7}}"></li>
</ul>
{% endif %}
{% endfor %}