python - 如果变量包含使用 Jinja 的 url,则动态迭代变量
问题描述
照片 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 %}
有什么办法吗?任何建议,将不胜感激。
解决方案
我通过将所有照片作为上下文字典中的列表传递来解决了这个问题,现在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 %}
它运行良好。谢谢你。
推荐阅读
- python - 来自 Django 的 PasswordChangeForm 没有显示在具有 2 个表单的模板上
- python - 对多索引数据帧进行排序
- javascript - 在 React js 中解析 JSON
- gitlab-ci - 如何通过artifactory在gitlab CI中实现artifact存储
- python - 上传文件时出现 400 Bad Request [Flask on Cloud9]
- c# - Blazor 中缺少表情符号
- python - 如何在 python-docx 中更改标题字体和大小?
- javascript - 创建自定义钩子以覆盖 useState() 钩子并合并对象属性(React JS)
- recursion - Mips 递归赋值
- javascript - 使用提交按钮关闭模式并关闭