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

Django 2.0站点地图sitemap.xml显示纯文本,如何转为XML格式?

Django站点地图输出纯文本而非XML格式的解决方法

问题详情

按照Django 2.0官方文档配置站点地图后,生产环境访问sitemap.xml时,仅显示带日期的正确链接,但内容为纯文本格式,无XML结构,导致谷歌搜索控制台无法接受该格式。

现有代码

sitemap.py

from blog.models import Post
from django.contrib.sitemaps import Sitemap

from courses.models import Course, Interview, Lesson


class PostSitemap(Sitemap):
    changefreq = 'weekly'
    priority = 0.9

    def items(self):
        return Post.objects.all()

    def lastmod(self, obj):
        return obj.updated
    ...

urls.py

path(
    "sitemap.xml",
    sitemap,
    {"sitemaps": {
                    "courses": CourseSitemap,
                    "posts": PostSitemap,
                    "lessons": LessonSitemap,
                    "podcasts": InterviewSitemap,
                  }},
    name="django.contrib.sitemaps.views.sitemap",
),

解决方法

  • 确认视图导入正确性
    在urls.py开头必须正确导入Django官方的sitemap视图:

    from django.contrib.sitemaps.views import sitemap
    

    若遗漏此导入,视图无法正确渲染XML结构,只会输出纯文本链接。

  • 检查模板是否被错误覆盖
    Django默认使用内置的sitemap.xml模板生成XML结构。如果你的项目中自定义了templates/sitemap.xml文件,检查其内容是否符合XML规范;若自定义模板存在错误,直接删除该文件,让Django使用默认模板即可。

  • 修正生产环境响应头
    生产环境的服务器(如Nginx、Apache)或中间件可能篡改了响应头,将Content-Type设为text/plain,导致浏览器识别为纯文本。需要在服务器配置中为sitemap.xml设置正确的响应头:

    Content-Type: application/xml; charset=utf-8
    

    以Nginx为例,可在location规则中添加:

    location = /sitemap.xml {
        add_header Content-Type application/xml;
    }
    
  • 排除版本与缓存问题
    确保使用的Django 2.0为官方稳定版本,无核心代码修改。同时清理生产环境的缓存,避免旧的纯文本响应被缓存返回。

  • 本地对比排查
    在本地开发环境测试sitemap.xml输出,若本地正常,说明问题集中在生产环境的服务器配置、中间件或缓存策略上,针对性排查即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:40:28