如何扩展Django网站地图模块以创建更复杂的网站地图?

0 投票
1 回答
719 浏览
提问于 2025-04-16 07:12

我有一个供应商,他们想要一个包含比普通搜索引擎网站地图更多元数据的网站地图。因此,我想找个简单的方法来扩展Django的网站地图模块。有没有人做过这个?或者能不能给我这个Django新手一些代码来实现呢?

迈克

1 个回答

2

如果你真的想这样做,你需要扩展一下 django.contrib.sitemaps.Sitemap.get_urls 这个方法,以便把额外的元信息添加到 url_info 字典里。下面是当前的 get_urls 方法,来自 django.contrib.sitemaps

def get_urls(self, page=1, site=None):
    if site is None:
        if Site._meta.installed:
            try:
                site = Site.objects.get_current()
            except Site.DoesNotExist:
                pass
        if site is None:
            raise ImproperlyConfigured("In order to use Sitemaps you must either use the sites framework or pass in a Site or RequestSite object in your view code.")

    urls = []
    for item in self.paginator.page(page).object_list:
        loc = "http://%s%s" % (site.domain, self.__get('location', item))
        priority = self.__get('priority', item, None)
        url_info = {
            'location':   loc,
            'lastmod':    self.__get('lastmod', item, None),
            'changefreq': self.__get('changefreq', item, None),
            'priority':   str(priority is not None and priority or '')
        }
        urls.append(url_info)
    return urls

之后,你还需要修改一下 django/contrib/sitemaps/templates/sitemap.xml 文件,把你的额外信息包含在网站地图中。虽然这和Django无关,但如果你要添加额外的元信息,建议你去看看 sitemaps.org 的协议部分,了解一下 如何扩展协议

撰写回答