forloop.counter не сбрасывается в endfor, как ожидалось в моем шаблоне django - PullRequest
1 голос
/ 07 февраля 2012

В указателе статей я бы хотел отобразить первое фото для данной статьи.Фотографии в другой модели, у которой есть внешний ключ к модели, где находятся статьи.

Таким образом, я выбираю статьи из данной категории, которые должны отображаться, затем я выбираю все фотографии из данной категории и сопоставляю их фрагменты в шаблоне, а затем я (хочу) отображать только первый результат.

но forloop.counter, который я использую для этой цели, не работает должным образом.Он продолжается без сброса, когда он проходит тег endfor.

например, вместо: «1,2,3, endfor, 1,2,3,4,5, endfor, 1,2,3,4», это считается: «1,2,3,endfor, 4,5,6,7,8, endfor, 9,10,11,12 "

Я что-то пропустил?

вот код шаблона:

{% extends 'index.html' %}
{% load markup %}
{% load thumbnail %}

{% block content %}
    {% for itm in plays %}
        <h2>{{ itm.name }}</h2>
        <div>{{ itm.desc }}</div>
        <div>
            {% for ftk in photos %}
                {% if ftk.nameofplay.slug == itm.slug %}
                    {% if forloop.counter == 1 %}
                        {% thumbnail ftk.photo "100x100" crop="center" as im %}
                        <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
                        {% endthumbnail %}
                    {% endif %}
                {% endif %}
            {% endfor %} {# forloop.counter should reset here and start from 1 again. or not? #}
        </div>
        <div>{{ itm.text|markdown|truncatewords_html:25 }}</div>
    {% endfor %}
{% endblock %}

и из views.py я отправляю примерно такие:

plays = Plays.objects.filter(category__slug__exact = category)
photos = Photos.objects.filter(nameofplay__category__slug__exact = category)

Спасибо!

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Цикл фотографий начнется со следующего экземпляра в наборе запросов воспроизведения, как только цикл пройдет через все фотографии, однако может показаться, что для этого может быть гораздо более быстрый способ.

Поскольку модель Photo подключена к модели Article через ForeignKey, и при условии, что фотографии связаны с правильными статьями, вы должны иметь возможность сделать что-то подобное в своем шаблоне, что позволит избежать проверки каждогофотография для каждой статьи:

plays = Plays.objects.filter(category__slug__exact = category)

{% for itm in plays%}
    {% itm.photo_set.all.0 %}
{% endfor %}

См. документацию по связанным объектам для более подробной информации: https://docs.djangoproject.com/en/dev/ref/models/relations/

0 голосов
/ 07 февраля 2012

Подготовьте ваши данные статей и их первую фотографию в вашем методе просмотра через «дополнительный» метод.https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.extra

plays = Plays.objects.filter(category__slug__exact=kategorie).extra(
select={
    'first_photo': 'Put this your select query for getting first photo (i.e. photo url)'
},
params={'category': your_param})

В шаблоне вы можете получить первое фото как:

{% for item in plays %}
    {{ item.first_photo }}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...