如何将标记网址添加到sitemap.xml?

时间:2019-02-12 07:37:07

标签: django web-applications sitemap wagtail django-taggit

我正在为Django + Wagtail项目生成sitemap.xml

我通过覆盖xml方法为文章实现了get_sitemap_urls生成。但是问题在于, Wagtail网站地图生成器不会“看到”博客标签网址(不会将其添加到网站地图中)。

...
from taggit.models import TaggedItemBase


class BlogPageTag(TaggedItemBase):
    content_object = ParentalKey(
        'BlogInnerPage',
        related_name='tagged_items',
        on_delete=models.CASCADE,
    )

class BlogInnerPage(Page):
    icon = models.ForeignKey(
        'wagtailimages.Image',
        null=True,
        blank=False,
        on_delete=models.SET_NULL,
        related_name='+'
    )
    ...
    post_date = models.DateTimeField(auto_now_add=True, null=True)
    tags = ClusterTaggableManager(through=BlogPageTag, blank=False)

    @property
    def sidebar_tags(self):
        blogs = BlogInnerPage.objects.live().all()
        tags = {}
        for post in blogs:
            for tag in post.tags.all():
                if tag.slug in tags:
                    tags[tag.slug]['count'] += 1
                else:
                    tags[tag.slug] = {
                        'name': tag.name,
                        'count': 1
                    }
        return sorted(tags.items())

    ... 
    def get_sitemap_urls(self):
        return [
            {
                'location': self.full_url,
                'lastmod': self.last_published_at,
                'changefreq': 'weekly',
                'priority': .8
            }
        ]

我希望看到标签的以下结果:

<url>
<loc>https://example.com/?tag=design</loc>
<lastmod>2019-01-31T12:24:01+00:00</lastmod>
<priority>0.80</priority>
</url>

这是博客文章中的内容:

<url>
<loc>
http://example.com/trends-booming-todays-it-industry/
</loc>
<lastmod>2018-10-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>

1 个答案:

答案 0 :(得分:4)

使用non-fast-forward使您处在正确的轨道上。默认实现只返回页面本身的条目,因为它可能无法知道您可能要过滤的所有查询参数。因此,由您决定将这些条目添加到列表中。

假设您有get_sitemap_urlsHomePage这两个页面类,则需要保留BlogInnerPage的实现,并将BlogInnerPage更新为返回自己的站点地图条目并添加标签条目。

HomePage