Skip to main content
 首页 » 编程设计

python之Django:如何从 Django 模板中的 object_list 索引图像

2024年09月07日45zlslch

所以基本上我想知道如何使用 for 循环在 django 模板中索引图像。这个想法是使用您的用户添加到模型中的前三张图像创建幻灯片放映

模型.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 %} 

请您参考如下方法:

如果您只需要 3 张图片(也许是最新的,对吧),您只需将自己的图片上下文从 View 传递到模板即可。

也许您正在使用 ListView , 那么你必须使用 get_context_data传递其他上下文数据。

这是 get_context_data 的简单用法.如果您想了解更多信息,可以查看django official documents for simple mixins (官方文档真的很有帮助!)

您的 View 示例

... 
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 

You can use your own code instead of list comprehension.

然后你可以简单地使用top_three_images在模板中。 您的模板

    {% for image_url in top_three_images %} 
    <img src="{{ image_url}}" alt=""> 
    {% endfor %} 

p.s. I recommend you to use your model field starting with lower_case (i.e. 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 %} 

希望有帮助。