Django:QuerySet评估

时间:2017-07-20 09:24:44

标签: django

Django 1.11.2

在示例中,下面我有一个QuerySet" arts"。

我在视图中迭代它(列表理解)。 将查询集传输到模板。 模板中的Ant我再次在for循环中迭代它。

在文档中,我可以读到,在迭代的情况下会对QuerySets进行评估。

这是文档:https://docs.djangoproject.com/en/1.11/ref/models/querysets/#when-querysets-are-evaluated

但我为PostgreSQL组织了一个日志文件。 并尝试控制数据库命中:

tail -f postgresql-2017-07-20_120840.log

嗯,在这种情况下只有一次打击。

你能对此发表评论吗?据我所知,QueryList在列表理解工作时进行了评估。然后它记住它的状态:它已被评估。在模板中,它只是在没有评估的情况下工作。

你能评论一下:我是对的。如果我错了,为什么只有一次评估?

views.py

class AsciiView(View):
    def get(self, request):
        arts = Art.objects.all()

        if arts:
            points = [(art.lat, art.lon) for art in arts if (art.lat and art.lon)]
        else:
            points = []

        return render(request,
                      "ascii_chan/ascii_chan.html",
                      {"arts": arts,
                       "points": points})

ascii_chan.html

{% for art in arts %}
    <div class="art">
        <h2 class="art-title">{{ art.title }}  {{ art.created }}</h2>

        <pre class="art-body">{{ art.art }}</pre>
    </div>
{% empty %}
    <div>Nothing so far.</div>
{% endfor %}

0 个答案:

没有答案