我在站点地图模板中使用get_absolute_url。不是sitemap.xml,而是站点布局中显示所有链接的页面。我基本上使用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
EDIT2:
我会在制作时打开缓存。我认为首先进行优化是一件好事。
答案 0 :(得分:0)
我认为使用get_absolute_url很重要,因为sitemap.xml和我的站点地图页面之间应该没有区别。我现在的解决方案就是这个(总是向更好的解决方案开放)
我创建了一个模型字段:
absolute_url = models.CharField(max_length=400, blank=True, editable=False)
然后自定义保存:
def save(self, *args, **kwargs):
self.absolute_url = self.get_absolute_url()
super(mypage, self).save(*args, **kwargs)
在我的模板中:
<ul>
{% for link in all_links %}
<li><a href="{{link.absolute_url}}">{{link.menu_title}}</a></li>
{% endfor %}
</ul>
这为我节省了很多疑问。现在只有一个用于链接(而不是每个链接1个查询)