3

我正在使用带有RequestSite(未SITE_ID设置)的站点框架来生成基于域的内容。我需要为每个域生成具有不同结果的站点地图,但我没有找到如何使这两个框架协同工作的方法。有什么办法可以获取Site当前的请求Sitemap吗?(从SITE_ID配置中获取它不是我的选择)。

这是我想做的一个例子:

from django.contrib.sitemaps import Sitemap
from blog.models import Entry

class BlogSitemap(Sitemap):

    def items(self, request):
        return Entry.objects.filter(is_draft=False, site=request.site)

但这是不可能的,因为没有requestin items()。有没有其他方法可以根据站点过滤站点地图中的项目?

4

1 回答 1

2

试试下面的例子:


from django.contrib.sitemaps import Sitemap
from django.contrib.sitemaps.views import sitemap

from blog.models import Entry


class BlogSitemap(Sitemap):
    _cached_site = None

    def items(self):
        return Entry.objects.filter(is_draft=False, site=self._cached_site)

    def get_urls(self, page=1, site=None, protocol=None):
        self._cached_site = site
        return super(BlogSitemap, self).get_urls(page=page, site=site, protocol=protocol)

而在urls.py

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

    # ...
    # other your urls
]

现在应该可以了。如果您有任何问题,请告诉我。

于 2019-11-20T15:39:07.187 回答