使用站点框架生成 Django 站点地图

Generate Django sitemap while using site framework

我正在使用带有 RequestSite(未设置 SITE_ID)的站点框架来生成基于域的内容。我需要为每个域生成具有不同结果的站点地图,但我没有找到使这两个框架协同工作的方法。有没有办法在Sitemap中获取当前请求的Site? (从 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)

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

试试下面的例子:


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
]

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