首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django get_absolute_url查询

Django get_absolute_url查询
EN

Stack Overflow用户
提问于 2017-08-17 06:46:50
回答 1查看 765关注 0票数 0

我在站点地图模板中使用get_absolute_url。不是sitemap.xml,而是站点布局中显示所有链接的页面。我基本上可以获得所有的页面对象,并使用get_absolute_url在模板中对它们进行iter。

我发现,对于每一个链接,数据库都会被击中一次。如何减少查询?

我想出了两种解决方案,但我不知道哪种方法是最好的:

  1. 使用Django的sitemap框架。我知道sitemap框架也使用get_absolute_url。生成sitemap.xml时,我无法检查查询的数量(没有显示调试工具栏)。
  2. 使用get_absolute_url编写自定义保存方法,并将url保存在数据库中

编辑:

我使用一些简单的代码来生成链接页面:

Views.py:

代码语言:javascript
复制
all_links = mypage.objects.all()

模板:

代码语言:javascript
复制
<ul>
{% for link in all_links %}
<li>li><a href="{{link.get_absolute_url}}">{{link.link_title}}</a></li>
{% endfor %}
</ul>

models.py:

代码语言:javascript
复制
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:

在生产过程中,我将打开缓存。我认为首先优化是一件好事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-17 09:22:59

我认为使用get_absolute_url很重要,因为sitemap.xml和sitemap页面之间不应该有任何区别。我的解决方案,就目前而言,是这样(总是开放给更好的解决方案)。

我创建了一个模型字段:

代码语言:javascript
复制
absolute_url = models.CharField(max_length=400, blank=True, editable=False)

然后进行自定义保存:

代码语言:javascript
复制
def save(self, *args, **kwargs):
        self.absolute_url = self.get_absolute_url()
        super(mypage, self).save(*args, **kwargs)

在我的模板中:

代码语言:javascript
复制
<ul>
     {% for link in all_links %}
           <li><a href="{{link.absolute_url}}">{{link.menu_title}}</a></li>
     {% endfor %}
</ul>

这为我节省了很多查询。现在只使用一个链接(而不是每个链接一个查询)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45728283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档