如何修改django-robots配置中站点地图显示的默认域名example.com
问题原因
Django自带的sitemap模块以及django-robots库默认都会读取django.contrib.sites框架配置的站点域名,未手动配置的情况下默认值就是example.com,和你的业务代码无关。
解决方案
第一步:启用sites框架
在项目settings.py的INSTALLED_APPS列表中添加django.contrib.sites,同时在配置文件末尾新增参数SITE_ID = 1。第二步:修改默认站点的域名信息
两种修改方式可选:- 后台修改:启动项目后进入Django admin后台,找到Sites模块,点击默认的example.com记录,将domain和name字段修改为你的实际域名和站点名称后保存。
- 命令行修改:执行
python manage.py shell进入交互环境,运行以下代码:
from django.contrib.sites.models import Site current_site = Site.objects.get(id=1) current_site.domain = "你的实际域名.com" # 替换成你自己的域名,不需要加http/https前缀 current_site.name = "你的站点名称" current_site.save()
第三步:可选配置(部署在反向代理后需添加)
如果你的生产环境用了Nginx等反向代理服务,需要在settings.py中新增配置USE_X_FORWARDED_HOST = True,确保Django可以正确获取到用户请求的真实域名。第四步:优化代码(可选)
你当前Snippet模型的get_absolute_url方法使用了硬编码的相对路径,建议替换为反向解析写法,适配不同域名场景:
from django.urls import reverse def get_absolute_url(self): return reverse('Snippet_detail', kwargs={'slug': self.slug})
生效验证
修改完成后需要清空sitemap的缓存(你配置了1小时的缓存,可直接重启服务或者删除对应缓存记录),重新访问sitemap1.xml和robots1.txt即可看到域名已经替换为你的实际域名。
内容的提问来源于stack exchange,提问作者amd
相关产品推荐
相关产品推荐

