Создание файла Sitemap: обновление страницы lastmod / last_published_at вручную - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть класс PublicationsPage и PublicationPage.PublicationsPage показывает список своих прямых потомков и отображает их в коротком списке предварительного просмотра на 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

Это означает, что когда новый PublicationPage добавляется / удаляется / изменяется в списке обновленийсоответственно.Но поскольку я не обновляю PublicationsPage, атрибут lastmod / last_published_at местоположения /publications никогда не изменяется.Не будет ли это ошибкой для поисковой системы?


По-настоящему хакерской попыткой может быть обновление даты last_published_at родительской страницы каждый раз, когда я прикасаюсь к дочерней записи.

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 ]

0 голосов
/ 11 февраля 2019

Вы можете определить 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
0 голосов
/ 11 февраля 2019

При создании карты сайта вы можете установить свойство lastmod, которое принимает метод, вызываемый для каждого элемента карты сайта.

Поэтому при создании карты сайта PublicationsPage задайте для этого свойства метод, который запрашивает все дочерние элементы каждого элемента PublicationsPage и возвращает самую последнюю дату.

...