Как создать несколько классов Sitemap в одном приложении django? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть my_app в django 'my_project'. У меня есть две модели в my_app

class Author(model):
    name = CharField(...)
    created_at = DateTimeField(auto_now_add=True, null=True)
    updated_at = DateTimeField(auto_now=True, null=True)

    def get_absolute_url()
        kwargs = {'author_pk': self.pk, }
        return reverse('author', kwargs=kwargs)


class Post(model):
    title = CharField(...)
    author = ForeignKey(Author, ...)
    created_at = DateTimeField(auto_now_add=True, null=True)
    updated_at = DateTimeField(auto_now=True, null=True)

    def get_absolute_url()
        kwargs = {'author_pk': slef.author.pk, 'post_pk': self.pk, }
        return reverse('author', kwargs=kwargs)

У меня есть файл sitemap в папке my_app, как показано ниже:

class AuthorSitemap(Sitemap):
    changefreq = "monthly"
    priority = 0.9

    def items(self):
        return Author.objects.all()

    def lastmod(self, obj):
        return obj.updated_at


class PostSitemap(Sitemap):
    changefreq = "monthly"
    priority = 0.9

    def items(self):
        return Post.objects.all()

    def lastmod(self, obj):
        return obj.updated_at

в папке my_project в файле urls У меня есть это:

sitemaps = {
    'my_app': PartnerSitemap, 'my_app': PartnerBlogPostSitemap,
}

urlpatterns = [
    ...
    ...
    path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),

]

Как видите, у меня есть словарь, в котором у меня есть два элемента с одинаковым ключом. Я изменил это, как показано ниже. Это все еще не работало:

sitemaps = {
    'my_app': [PartnerSitemap, PartnerBlogPostSitemap, ]
}

Как мне заставить это работать?

1 Ответ

0 голосов
/ 08 октября 2019

Сработало так:

sitemaps = {
    'my_app1': AuthorSitemap
    'my_app2', PostSitemap, 
}

Кажется, что имя приложения не важно. Словарь Sitemap используется только для его ключевых значений. Он написан для передачи только ключевых значений. Я мог бы написать это так:

sitemaps = {
    'my_app_author': AuthorSitemap
    'my_app_post', PostSitemap, 
}
...