启动Django时出现Site matching query错误及/login路径报错如何解决?
报错信息
Error: DoesNotExist at /login/
Site matching query does not exist.
产生原因
- 项目
settings.py中已注册django.contrib.sites应用并配置了SITE_ID参数,但当前项目数据库中不存在与该SITE_ID值匹配的站点记录 - 登录逻辑依赖Sites框架读取当前站点配置,查询不到对应记录就会抛出该异常
修复方案
方案1:项目无需使用Sites框架时使用
直接修改settings.py配置:
- 删除
INSTALLED_APPS列表中的django.contrib.sites条目 - 删除全局配置中的
SITE_ID = xxx整行代码 - 重启Django服务即可恢复访问
方案2:项目需要使用Sites框架时使用
按以下步骤操作:
- 先执行迁移确保Sites相关表已创建:
python manage.py migrate - 进入Django shell添加匹配的站点记录:
执行python manage.py shell进入交互环境,依次输入以下代码:
from django.contrib.sites.models import Site # 填入的id需要和settings.py中SITE_ID的配置值保持一致,默认配置值为1 Site.objects.create(id=1, domain='127.0.0.1:8000', name='本地开发环境')
如果不清楚已有的站点记录,可以在shell中执行查询语句确认:print(Site.objects.values_list('id', 'domain', 'name'))
将settings.py中的SITE_ID修改为查询结果中存在的id值即可。
3. 重启Django服务,重新访问/login路径验证问题已解决。
内容的提问来源于stack exchange,提问作者Владислава Черкасова
相关产品推荐
相关产品推荐

