You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Sitemap类alternates属性致sitemap.xml渲染异常

Django StaticViewSitemap启用alternates=True后XML渲染异常的解决方法

问题原因

给StaticViewSitemap添加alternates=True属性后,Django会调用alternate_hreflangs方法生成备用语言URL,但你的items方法返回的是视图名称字符串(比如'index'),代码里却试图访问obj.alternative_object_url——字符串对象不存在该属性,会触发AttributeError,导致XML渲染流程崩溃,最终输出异常的拼接字符串。

修复代码

修改alternate_hreflangs方法,针对视图名称字符串生成对应语言的URL:

from django.urls import reverse
from django.contrib import sitemaps

class StaticViewSitemap(sitemaps.Sitemap):
    priority = 0.5
    changefreq = 'weekly' 
    protocol = 'https' 
    i18n = True 
    alternates = True

    def alternate_hreflangs(self, obj):
        # obj是items返回的视图名称,用reverse生成en-us语言的备用URL
        return [
            ('en-us', reverse(obj, locale='en-us'))
        ]

    def items(self):
        return ['index','about', 'contact', 'why', 'product', 'tender-management', 'e-sourcing', 'network', 'faq']

    def location(self, item):
        return reverse(item)

关键说明

  • 因为items返回的是视图名称而非模型实例,不能通过obj的属性获取URL,必须用reverse配合locale参数生成对应语言的地址。
  • 确保Django项目已正确配置国际化支持:添加LocaleMiddleware中间件、配置LOCALE_PATHS、设置支持的语言列表等,否则reverse的locale参数无法正常工作。
  • 若需生成其他语言的备用URL,直接在alternate_hreflangs的返回列表中添加对应的语言代码和URL即可。

内容的提问来源于stack exchange,提问作者Diego Bianchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:40:44