我使用带有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)但这是不可能的,因为在request中没有items()。有没有其他方法可以根据站点过滤站点地图中的项目?
发布于 2019-11-20 15:39:07
尝试以下示例:
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
]现在应该可以用了。如果你有什么问题请告诉我。
https://stackoverflow.com/questions/58791521
复制相似问题