擅长:python、mysql、java
<p>在我的一些代码中可以看到,我的模板中有:</p>
<pre><code>{{ mytable.0.pk }}
{{ mytable.1.pk }}
{{ mytable.0.pk }}
{{ mytable.3.pk }}
</code></pre>
<p>我得到这个输出:</p>
^{pr2}$
<p>奇怪的是,除非您认为django执行数据库查询时非常懒惰。以下是mysql日志中显示的一页加载:</p>
<pre><code>SELECT `mytable`.`id` FROM `mytable` ORDER BY RAND() LIMIT 1
SELECT `mytable`.`id` FROM `mytable` ORDER BY RAND() LIMIT 1 OFFSET 1
SELECT `mytable`.`id` FROM `mytable` ORDER BY RAND() LIMIT 1
SELECT `mytable`.`id` FROM `mytable` ORDER BY RAND() LIMIT 1 OFFSET 3
</code></pre>
<p>每次使用点表示法时,它都在执行一个完整的新查询。我建议修改代码如下:</p>
<pre><code>def rate(request, type):
photos = list(Photo.objects.order_by('?')[:2])
c = Context({"photos": photos, "type": type})
return render_to_response("base_rate.html", c)
</code></pre>
<p>因为<code>list()</code>正在强制求值,它将立即执行查询。此外,这两个项目的数据都已经缓存,因此没有理由再次访问数据库。你该走了。在</p>