代码之家  ›  专栏  ›  技术社区  ›  ThunderHorn

如何在django模板中查找第一个实例

  •  0
  • ThunderHorn  · 技术社区  · 6 年前

       context ={
            "items":Items.objects.all(),
            "item_pics":Item_pics.objects.all(),
        }
        return render(request, 'menu/items.html', context)
    

    我的物品“物品图片”看起来像那样

    item_pics = [[{'item_id': 1, 'is_front': False, 'url': 'url_to_the_image1'},
                 {'item_id': 1, 'is_front': False, 'url': 'url_to_the_image2'},
                 {'item_id': 1, 'is_front': False, 'url': 'url_to_the_image3'},
                 {'item_id': 1, 'is_front': False, 'url': 'url_to_the_image4'},
                 {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image5'},
                 {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image6'},
                 {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image7'},
                 {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image8'},
                 {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image9'}],
                 [{'item_id': 2, 'is_front': False, 'url': 'url_to_the_image1'},
                 {'item_id': 2, 'is_front': False, 'url': 'url_to_the_image2'},
                 {'item_id': 2, 'is_front': False, 'url': 'url_to_the_image3'},
                 {'item_id': 2, 'is_front': False, 'url': 'url_to_the_image4'},
                 {'item_id': 2, 'is_front': False, 'url': 'url_to_the_image5'},
                 {'item_id': 2, 'is_front': False, 'url': 'url_to_the_image6'},
                 {'item_id': 2, 'is_front': False, 'url': 'url_to_the_image7'},
                 {'item_id': 2, 'is_front': False, 'url': 'url_to_the_image8'},
                 {'item_id': 2, 'is_front': False, 'url': 'url_to_the_image9'}]
                 ]
    

            {% for pic in item_pics %}
               {% if pic.is_front %}
                   <img src="{{ pic.url }}"> 
               {% endif %}
            {% endfor %}
    

    问题

    怎么能挑出第一次发生的 pic.is_front == True 然后停止for循环

    另一个问题

    pic.is_fron = False 每一张照片 item_pics 我想选第一张照片 物品图片

    在python中

    for pics in item_pics:
        found = False
        for pic in pics:
            if pic['is_front'] == True and found == False:
                print(pic['item_id'], pic['url'])
                found = True
        if found == False:
            print(pics[0]['item_id'], pics[0]['url'])
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   bruno desthuilliers    6 年前

    这最好在python代码中完成—或者在视图本身中,或者如果不可能的话,使用 custom template filter .

    在视野中

    item_pics = [{'item_id': 1, 'is_front': False, 'url': 'url_to_the_image'},
             {'item_id': 1, 'is_front': False, 'url': 'url_to_the_image'},
             {'item_id': 1, 'is_front': False, 'url': 'url_to_the_image'}
             {'item_id': 1, 'is_front': False, 'url': 'url_to_the_image'}
             {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image'}
             {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image'}
             {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image'}
             {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image'}
             {'item_id': 1, 'is_front': True, 'url': 'url_to_the_image'}
             ]
     front_pic = None
     for pic in item_pics:
         if pic["is_front"]:
             front_pic = pic
             break
     else:
         front_pic = item_pics[0]
     context = {"item_pics": item_pics, "front_pic": front_pic}
     return render(....)
    

    front_pic .

    使用自定义筛选器(请参阅指向文档的链接,以了解在何处放置此代码):

    @register.filter
    def get_front_pic(item_pics):
         for pic in item_pics:
             if pic["is_front"]:
                 return pic
         return item_pics[0]
    

    在模板中:

    {% load front_pic from yourtaglib %}
    
    {% with item_pics|get_front_pic as front_pic %}
    <img src="{{ front_pic.url }}">
    {% endwith %}