首页 > 解决方案 > 如果变量包含使用 Jinja 的 url,则动态迭代变量

问题描述

我在 Django admin 中有一组上传的照片 在此处输入图像描述

照片 URL 存储在 Django 应用程序中,即Listing里面model.py

class Listing(models.Model):
    photo_1 = models.ImageField(upload_to='photos/%Y/%m/%d/',blank=True)
    photo_2 = models.ImageField(upload_to='photos/%Y/%m/%d/',blank=True)
    photo_3 = models.ImageField(upload_to='photos/%Y/%m/%d/',blank=True)
    photo_4 = models.ImageField(upload_to='photos/%Y/%m/%d/',blank=True)
    photo_5 = models.ImageField(upload_to='photos/%Y/%m/%d/',blank=True)
    photo_6 = models.ImageField(upload_to='photos/%Y/%m/%d/',blank=True)

我的代码views.py看起来像

def listing(request, listing_id):
    listing = get_object_or_404(Listing, pk=listing_id)
    context = {
        'listing': listing
    }
    return render(request, 'listings/listing.html', context)

现在,在我的listing.html文件中,我可以检查照片 URL 是否可用,然后应用该设计来显示照片,如下所示

        {% if listing.photo_1 %}
          <div class="col-md-2">
            <a href="{{ listing.photo_1.url }}" data-lightbox="home-images">
              <img src="{{ listing.photo_1.url }}" alt="" class="img-fluid">
            </a>
          </div>
        {% endif %}

我可以为所有六张照片做到这一点,但我想动态地做到这一点

  {% for i in range (1,7) %}
    {% if listing.photo_{{i}} %}
      <div class="col-md-2">
        <a href="{{ listing.photo_{{i}}.url }}" data-lightbox="home-images">
          <img src="{{ listing.photo_{{i}}.url }}" alt="" class="img-fluid">
        </a>
      </div>
    {% endif %}
  {% endfor %}

有什么办法吗?任何建议,将不胜感激。

标签: pythonpython-3.xdjangojinja2

解决方案


我通过将所有照片作为上下文字典中的列表传递来解决了这个问题,现在views.py看起来像

def listing(request, listing_id):
    listing = get_object_or_404(Listing, pk=listing_id)
    context = {
        'listing': listing,
        'photos': [listing.photo_1,listing.photo_2,listing.photo_3,listing.photo_4,listing.photo_5,listing.photo_6]
    }
    return render(request, 'listings/listing.html', context)

我的html代码看起来像

    {% for photo in photos %}
      {% if photo %}
        <div class="col-md-2">
          <a href="{{ photo.url }}" data-lightbox="home-images">
            <img src="{{ photo.url }}" alt="" class="img-fluid">
          </a>
        </div>
      {% endif %}
    {% endfor %}

它运行良好。谢谢你。


推荐阅读