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

执行python3 manage.py runserver时遇AttributeError: NoneType无startswith属性

解决Django运行python3 manage.py runserver时的AttributeError问题

问题根源

你的settings.py加载.env文件的路径错误,导致数据库配置参数未被正确读取,DB_HOST取值为None,触发了MySQL后端的startswith属性调用错误。

因为settings.py位于project/todo/目录下,dirname(__file__)返回的是todo目录路径,用join(dirname(__file__), env_filename)会尝试读取todo/.env,但实际.env在项目根目录(与manage.py同级),所以加载失败,环境变量未注入系统。

修复方案

1. 修正settings.py的.env加载路径

修改加载.env的代码,改为从项目根目录读取:

import os
from os.path import join, dirname, abspath
from dotenv import load_dotenv

# 获取项目根目录(manage.py所在目录)
BASE_DIR = dirname(dirname(abspath(__file__)))

ENV = os.environ.get('ENV')

if ENV == 'PROD':
    env_filename = '.env.prod'
elif ENV == 'TEST':
    env_filename = '.env.test'
else:
    env_filename = '.env'

# 从项目根目录加载.env文件
dotenv_path = join(BASE_DIR, env_filename)
load_dotenv(dotenv_path)

2. 清理mydb.py的冗余代码

mydb.py中重复调用了mysql.connector.connect(),第二次调用未传参数会导致连接失败,删除冗余行:

# 删除此行冗余代码
# dataBase = mysql.connector.connect()

3. 验证环境变量加载(可选)

在settings.py中添加调试代码,确认环境变量是否正确读取:

# 调试用,确认DB_HOST是否为localhost
print(os.environ.get('DB_HOST'))

运行python3 manage.py runserver前检查输出,确认无误后删除该行调试代码。

额外检查项

  • 确保python-dotenv已安装:执行pip install python-dotenv
  • 检查.env文件权限,确保当前用户可读取
  • 确保.gitignore中包含.env,避免敏感信息提交到版本控制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:43:37