如何加入 wagtail 和 django 站点地图?

vyc*_*iuz 5 python sitemap django wagtail

我在我的 Django 项目中使用 wagtail 应用程序。是否可以将 django 站点地图(https://docs.djangoproject.com/en/1.11/ref/contrib/sitemaps/)与 wagtail 站点地图(wagtail.contrib.wagtailsitemaps)一起使用?尝试使用 django 站点地图索引,但它只划分 django 站点地图,我如何包含 wagtail 站点地图?

小智 5

Wagtail 从 1.10 版开始使用 Django 站点地图框架。这应该允许您轻松地将常规 Django 站点地图与 Wagtail 站点地图结合起来。

然而,有一个小问题;因为 wagtail 支持多个站点,站点地图应该知道站点地图是为哪个站点生成的。出于这个原因,wagtail 提供了它自己的站点地图视图(索引和站点地图)。这些视图扩展了 Django 站点地图视图以传播站点对象。

因此,不要从 django 导入站点地图视图:

from django.contrib.sitemaps import views as sitemap_views
Run Code Online (Sandbox Code Playgroud)

使用 wagtail 版本:

from wagtail.contrib.wagtailsitemaps import views as sitemaps_views
Run Code Online (Sandbox Code Playgroud)

然后使用 Django 方法将 url 映射到视图:

from wagtail.contrib.wagtailsitemaps import Sitemap
urlpatterns = [
    # ...
    url(r'^sitemap\.xml$', sitemaps_views.index, {
        'sitemaps': {
            'pages': Sitemap
        },
        'sitemap_url_name': 'sitemap',
    }),
    url(r'^sitemap-(?P<section>.+)\.xml$', sitemaps_views.sitemap,
        name='sitemap'),
    # ...
]
Run Code Online (Sandbox Code Playgroud)

有关完整示例,您可以在测试中查看代码:

https://github.com/wagtail/wagtail/blob/911009473bc51e30ff751fda0ea5d2fa1d2b450f/wagtail/tests/urls.py#L36