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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:02:34