Я думаю, что вы можете просто сделать это:
Просмотр: отправить все запросы к элементам изображения через контекст
def index(request):
context = {
'pictures': ItemImage.objects.filter(main=True).order_by('item')
}
return render(request, 'gallery/index.html', context)
Шаблон: перебирать элементы изображения и показывать их
<div id="image-popups" class="grid">
{% for pic in pictures %}
<div class="item">
<img class="lazy" src="{{ pic.image.url }}"
data-mfp-src="{{ pic.image.url }}"
data-effect="mfp-zoom-in">
<p>{{ pic.item.name }}</p>
</div>
{% endfor %}
</div>
Обновление
набор запросов с изображениями из активного элемента:
ItemImage.objects.filter(main=True, item__active=True).order_by('item')
Если вы хотите показать изображения для одного элемента, то вам нужно определить представление относительно этого. Вы можете использовать DetailView здесь.
Допустим, вы создали представление, которое возвращает элемент (аналог вашей текущей реализации), затем вы можете показать изображения, связанные с элементом в шаблоне, следующим образом:
{% for pic in item.itemimage_set.all %}
<img class="lazy" src="{{ pic.image.url }}"
data-mfp-src="{{ pic.image.url }}"
data-effect="mfp-zoom-in">
{% endfor %}
Это называется связанными объектами. Пожалуйста, смотрите документацию по этому здесь .
Наконец, допустим, вы определили свой вид, и ваш URL выглядит так:
path('item/<pk:int>/', your_view, name="item-details"), # <-- defining name here is important
Затем вы можете предоставить URL деталей в gallery/index.html
, например:
<div id="image-popups" class="grid">
{% for pic in pictures %}
<div class="item">
<img class="lazy" src="{{ pic.image.url }}"
data-mfp-src="{{ pic.image.url }}"
data-effect="mfp-zoom-in">
<a href={% url 'item-details' pic.item.pk %}>{{ pic.item.name }}</a>
</div>
{% endfor %}
</div>
Для с именами url, пожалуйста, смотрите документацию относительно url namespace .