Django自定义域名部署时出现'list' object has no attribute 'lower'错误求助
解决Django自定义域名访问时的
'list' object has no attribute 'lower'错误 错误原因分析
从报错栈可以明确:is_same_domain()函数尝试对pattern调用.lower()方法,但pattern是列表类型而非字符串。这说明你的ALLOWED_HOSTS配置中存在嵌套列表元素,或者运行时ALLOWED_HOSTS被错误解析成了包含列表的结构,而非纯字符串列表。
解决方案
1. 修正ALLOWED_HOSTS的配置格式
确保ALLOWED_HOSTS是纯字符串列表,无嵌套结构,同时添加你的自定义域名:
# 基础写法(精确匹配自定义域名) ALLOWED_HOSTS = ['xyz.railway.app', '127.0.0.1', '你的自定义域名.com'] # 若需匹配自定义域名的所有子域名,可使用前缀点 ALLOWED_HOSTS = ['xyz.railway.app', '127.0.0.1', '.你的自定义域名.com']
检查settings.py,绝对避免类似ALLOWED_HOSTS = [['你的自定义域名.com'], 'xyz.railway.app']这种嵌套列表的错误写法。
2. 排查环境变量解析问题
如果ALLOWED_HOSTS是从Railway环境变量读取的,确保解析逻辑正确:
import os # 从环境变量读取并分割为列表,同时过滤空字符串 ALLOWED_HOSTS = [ host.strip() for host in os.getenv('ALLOWED_HOSTS', 'xyz.railway.app,127.0.0.1').split(',') if host.strip() ]
同时检查Railway平台的环境变量设置,确保ALLOWED_HOSTS的值是逗号分隔的纯字符串(如xyz.railway.app,127.0.0.1,你的自定义域名.com),而非带括号或其他格式的内容。
3. 验证运行时的ALLOWED_HOSTS值
可在settings.py中添加临时调试代码,确认运行时的实际值:
print("当前ALLOWED_HOSTS:", ALLOWED_HOSTS) for idx, item in enumerate(ALLOWED_HOSTS): print(f"元素{idx}类型:", type(item))
部署后查看Railway日志,确保所有元素都是<class 'str'>类型,无列表类型的元素。
内容的提问来源于stack exchange,提问作者Adeeb Hassi
相关产品推荐
相关产品推荐

