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 %}