作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的模板标签:
@register.filter
def split_to_4_columns(queryset):
split = int(ceil(queryset.count()/4.))
columns = list()
for i in range(4):
columns.append(queryset[i*split:(i+1)*split])
return columns
这是我在模板中的伪用法:
{% for column in queryset|split_to_4_columns %}
<div class="list">
{% for object in column %}
<a href="{{ object.get_absolute_url }}" class="item">{{ object }}</a>
{% endfor %}
</div>
{% endfor %}
它基本上将我的长查询集(几百个对象)分成 4 列,以便更好地展示 html。但它似乎也对我的数据库造成了沉重打击。首先它评估完整的查询集,然后每一列都有自己的评估,我该如何优化它?
我正在使用缓存,但我仍然想知道如何在比缓存更低的级别上对其进行优化。
最佳答案
在处理所有数据时,必须处理至少一个返回所有数据的select
。要查询一次数据,您可以在第一步请求所有数据(评估查询集),然后在第二步用纯 python 拆分它(不访问数据库):
@register.filter
def split_to_4_columns(queryset):
values = list(queryset.all())
split = int(ceil(len(values)/4.))
columns = [values[i*split:(i+1)*split] for i in range(4)]
return columns
关于python - Django - 查询集拆分为 4,对数据库造成大量命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029420/
我是一名优秀的程序员,十分优秀!