【发布时间】:2021-07-04 11:46:44
【问题描述】:
我在站点地图模板中使用 get_absolute_url。不是 sitemap.xml,而是站点布局中显示所有链接的页面。我基本上得到了所有页面对象,并在模板中使用 get_absolute_url 遍历它们。
我发现对于每个链接,数据库都会被点击一次。如何减少查询?
我想到了两种解决方案,但不知道哪种方式最好:
- 使用来自 Django 的站点地图框架。我知道站点地图框架也使用 get_absolute_url。生成 sitemap.xml 时,我无法检查查询量(调试工具栏不显示)。
- 编写自定义保存方法,将url保存在数据库中,使用get_absolute_url
编辑:
我用一些简单的代码来生成链接页面:
Views.py:
all_links = mypage.objects.all()
模板:
<ul>
{% for link in all_links %}
<li>li><a href="{{link.get_absolute_url}}">{{link.link_title}}</a></li>
{% endfor %}
</ul>
models.py:
def get_absolute_url(self):
if self.submenu:
return "/%s/%s/" %(self.submenu.slug,self.slug)
elif not self.mainmenu:
return "/submenu/%s" % self.slug
else:
return "/%s/" % self.slug
编辑2:
我将在生产时打开缓存。我觉得先优化是好事。
【问题讨论】:
-
如果你有请求对象,那么你可以使用this它甚至不会访问你的数据库一次
-
我想要一份我的网站所有可用网址的列表。我不明白如何为此使用请求对象?
-
如果您不显示生成查询的代码,我们将无能为力。
-
还有更多解决方案,例如缓存或优化获取所有对象的查询,但如果没有您的代码,则无法提供建议
-
感谢您的所有回复。我已经在我的问题中添加了代码。