代码之家  ›  专栏  ›  技术社区  ›  Yannic Hamann

站点地图生成:手动更新第页的lastmod/上次发布时间

  •  0
  • Yannic Hamann  · 技术社区  · 6 年前

    我有一个 PublicationsPage 和A PublicationPage 班级。 这个 宣传页 显示其直接子级的列表,并将其呈现在以下位置的预览列表中 http://mysite/publications .

    class PublicationsPage(Page):
        # ...
        def get_context(self, request):
            context = super().get_context(request)
            publications = PublicationPage.objects.child_of(self).live()
            context['publications'] = publications
            return context
    

    这意味着无论何时 宣传页面 相应地添加/删除/修改列表更新。但是因为我没有更新 宣传页 这个 lastmod / last_published_at 的属性 /publications 位置不变。这对搜索引擎来说不是错了吗?


    一个真正的黑客尝试可能是更新 上次发布时间 每次触摸子条目时父页面的日期。

    class PublicationPage(Page):
        # ...
        def save(self, *args, **kwargs):
            result = super().save(*args, **kwargs)
            from datetime import datetime
            parent_page = self.get_parent()
            parent_page.last_published_at = datetime.now()
            parent_page.save()
            return result
    

    还有什么建议吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Yannic Hamann    6 年前

    你可以定义 get_sitemap_urls 在您的页面模型上,如下所示:

    class PublicationsPage(Page):
        def get_sitemap_urls(self, request=None):
            # Get the defaults sitemap URLS.
            urls = super().get_sitemap_urls(request=request)
    
            # Get the last modifications time of your publications.
            publications = PublicationPage.objects.child_of(self).live()
            last_publication = publications.order_by('-last_published_at').first()
    
            # Update the default entry.
            if last_publication:
                urls[0]['lastmod'] = last_publication.last_published_at
    
            # Return the urls.
            return urls
    
        2
  •  1
  •   Demetris Aaron    6 年前

    当生成 sitemap ,可以设置属性 lastmod ,它接受一个方法,并为站点地图的每个项调用该方法。

    因此,在生成 PublicationsPage sitemap,将该属性设置为查询每个 宣传页 项目并返回最新日期。