【问题标题】:Dynamically iterate over variables if it contains a url using Jinja如果变量包含使用 Jinja 的 url,则动态迭代变量
【发布时间】:2021-10-01 01:00:26
【问题描述】:

我在 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 %}

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

【问题讨论】:

    标签: python python-3.x django jinja2


    【解决方案1】:

    我通过将所有照片作为列表传递到上下文字典中解决了这个问题,现在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 %}
    

    它运行良好。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-22
      • 2018-11-03
      • 2020-08-05
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多