【问题标题】:Generate Django sitemap while using site framework使用站点框架生成 Django 站点地图
【发布时间】:2019-11-10 18:06:22
【问题描述】:

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

这是我想做的一个例子:

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。还有其他方法可以根据站点过滤站点地图中的项目吗?

【问题讨论】:

  • 我没有正确理解这个问题。您是否尝试根据请求的域获取站点地图?或者您想为 domain_1 和 domain_2 显示一些特定的站点地图?
  • @JPG 是的,我需要基于域的特定内容。查看更新的问题

标签: django django-sites django-sitemaps


【解决方案1】:

试试下面的例子:


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
]

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

【讨论】:

  • 为将用于站点地图的项目准备 URL 列表。实际上很奇怪,它没有这个功能。
猜你喜欢
  • 2017-11-29
  • 1970-01-01
  • 2010-09-17
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多