Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
forloop.counter未按django模板中的预期在endfor重置_Django_Templates_Loops_For Loop - Fatal编程技术网

forloop.counter未按django模板中的预期在endfor重置

forloop.counter未按django模板中的预期在endfor重置,django,templates,loops,for-loop,Django,Templates,Loops,For Loop,在文章索引中,我想显示给定文章的第一张照片。照片位于另一个模型中,该模型具有外键,用于显示文章所在的模型 所以我从给定的类别中选择应该显示的文章,然后我从给定的类别中选择所有照片并在模板中匹配它们的片段,然后我只想显示第一个结果 但是我用于此目的的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

在文章索引中,我想显示给定文章的第一张照片。照片位于另一个模型中,该模型具有外键,用于显示文章所在的模型

所以我从给定的类别中选择应该显示的文章,然后我从给定的类别中选择所有照片并在模板中匹配它们的片段,然后我只想显示第一个结果

但是我用于此目的的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 %}

谢谢

通过extra方法在您的view方法中准备文章的数据及其第一张照片。

在模板中,您可以通过以下方式获得第一张照片:

{% for item in plays %}
    {{ item.first_photo }}
{% endfor %}

照片循环将在plays queryset中的下一个实例中重新开始,一旦循环遍历了所有照片,但是似乎有一种更快的方法来完成这一任务

由于照片模型通过ForeignKey连接到文章模型,并且假设照片连接到正确的文章,您应该能够在模板中执行类似的操作,这应该避免检查每篇文章的每张照片:

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

{% for itm in plays%}
    {% itm.photo_set.all.0 %}
{% endfor %}
有关更多详细信息,请参见相关对象上的文档参考:

谢谢,我正试图避免这种情况。问题是,我无法访问正确的参数。在这个级别/视图中,我了解父类别,但无法指定文章并将照片附加到其中。。。看起来情况很尴尬。因为我正在将包含所有文章的对象发送到我的模板中,我如何将相关照片附加到模板中?但我的解决方案会起作用,如果计数器起作用的话……是的,就是这样。快速简单。谢谢感谢您的建议,这是一种正确的方法,而且更容易使用_set来反向跟踪关系!正确答案来自《滚石》;不过,作为将来的参考,它将有助于循环逻辑的第一个实例。
{% for item in plays %}
    {{ item.first_photo }}
{% endfor %}
plays = Plays.objects.filter(category__slug__exact = category)

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