繁体   English   中英

Django 模板查询循环渲染耗时太长

[英]Django template query for loop render taking too much time

我有一个 object 的限制 10 的相关查询。 在开发模式下加载整个页面需要 9s 以上。 当我没有在模板上运行相关的循环查询时,加载只需 1 秒。 我很困惑这里发生了什么! 请帮我找出问题/我在这里做错了什么! 提前致谢!

这是我的视图文件代码-

related = News.objects.filter(
            is_active=True,
            status='public',
            language=request.LANGUAGE_CODE,
            category=news.category
        ).order_by('-published_at')[:10]

这是模板文件的循环 -

{% for r in related %}
    <li class="row mb-4">
        <a href="{% url 'single_news' r.id %}" class="col-5">
            <img src="{{ r.featured_image.url }}" alt="Image" class="rounded img-fluid">
        </a>
        <div class="col-7">
            <a href="{% url 'single_news' r.id %}" class="no-underline">
                <h6 class="mb-3 h5 text-charcoal">{{ r.heading }}</h6>
            </a>
            <div class="d-flex text-small">
                <span class="text-muted ml-1">{{ r.published_at }}</span>
            </div>
        </div>
    </li>
{% endfor %}

这是查询时间的 django-debug-ttolbar 图像 -

在此处输入图像描述

数据库中有多少个新闻对象? 如果您有很多它们,并且您在底层where子句或order_by子句中的列上没有索引,那么获取这 10 个新闻项目可能需要很长时间。 您可以直接访问数据库吗? 我会尝试该查询的 SQL 并查看查询是否需要很长时间:

SELECT * FROM content_news WHERE is_active=1 AND status='public' AND language='bn' ORDER_BY published_at DESC

我注意到屏幕截图中的查询没有category=news.category子句。 类别是外键吗? 如果是这样,您可能希望使用select_related来有效地检索它。

希望对您有所帮助,祝您编码愉快!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM