Пользовательская карта сайта трясогузки

Я пытаюсь создать собственную карту сайта Wagtail, которая включает changefreq и priority. По умолчанию это только lastmod и url.

Согласно документам Wagtail (http://docs.wagtail.io/en/latest/reference/contrib/sitemaps.html) вы можете перезаписать шаблон по умолчанию, создав карту сайта в /wagtailsitemaps/sitemap.xml.

Я сделал это. Шаблон карты сайта выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% spaceless %}
{% for url in urlset %}
  <url>
    <loc>{{ url.location }}</loc>
    {% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}   </lastmod>{% endif %}
    {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
    {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
   </url>
{% endfor %}
{% endspaceless %}
</urlset>

Я добавил wagtail.contrib.wagtailsitemaps в мои УСТАНОВЛЕННЫЕ ПРИЛОЖЕНИЯ в настройках. Я изменил свой класс Page, чтобы включить функцию get_sitemap_urls в попытке перезаписать его.

class BlockPage(Page):
    author = models.CharField(max_length=255)
    date = models.DateField("Post date")
    body = StreamField([
        ('heading', blocks.CharBlock(classname='full title')),
        ('paragraph', blocks.RichTextBlock()),
        ('html', blocks.RawHTMLBlock()),
        ('image', ImageChooserBlock()),
    ])

    search_fields = Page.search_fields + (
        index.SearchField('heading', partial_match=True),
        index.SearchField('paragraph', partial_match=True),
    )

    content_panels = Page.content_panels + [
        FieldPanel('author'),
        FieldPanel('date'),
        StreamFieldPanel('body'),
    ]

    def get_sitemap_urls(self):
        return [
            {
                'location': self.full_url,
                'lastmod': self.latest_revision_created_at,
                'changefreq': 'monthly',
                'priority': .5
            }
        ]

Это все еще не работает. Я что-то еще упускаю? Документы Wagtail не предоставляют дополнительной информации, а другая документация в Интернете по Wagtail очень легкая. Любая помощь будет оценена.


person kbdev    schedule 17.06.2016    source источник


Ответы (1)


Я понял. У меня была функция не в том классе. Он должен был войти в каждый конкретный класс страницы, чтобы отображаться в карте сайта, а не в общем классе BlockPage. Это также позволило мне при необходимости установить различный приоритет для каждой страницы.

Решение:

class HomePage(Page):
    body = RichTextField(blank=True)

    content_panels = Page.content_panels + [
        FieldPanel('body', classname='full')
    ]

    def get_sitemap_urls(self):
        return [
            {
                'location': self.full_url,
                'lastmod': self.latest_revision_created_at,
                'changefreq': 'monthly',
                'priority': 1
            }
        ]

class AboutPage(Page):
    body = RichTextField(blank=True)

    content_panels = Page.content_panels + [
        FieldPanel('body', classname='full')
    ]

    def get_sitemap_urls(self):
        return [
            {
                'location': self.full_url,
                'lastmod': self.latest_revision_created_at,
                'changefreq': 'monthly',
                'priority': .5
            }
        ]
person kbdev    schedule 17.06.2016
comment
Наверное, потому, что редактор Stack Overflow не слишком хорош, но отступы отсутствуют. get_sitemap_urls - это функция класса (на что указывает self) - person MagicLAMP; 24.10.2018
comment
@MagicLAMP Спасибо, что заметили. Я исправил отступ. - person kbdev; 25.10.2018