如何从jp.naiuma.com访问naiuma.com的Media文件夹图片?
解决跨域名媒体文件访问问题
核心思路
将媒体文件的URL从相对路径改为主域名的绝对路径,同时配置主域名允许子域名跨域请求资源,让子域名页面能直接加载主域名存储的图片。
具体步骤
1. 修改MEDIA_URL为绝对路径
在项目的settings.py中,把原相对路径的MEDIA_URL替换为主域名的完整路径:
BASE_DIR = Path(__file__).resolve().parent.parent MEDIA_URL = 'https://naiuma.com/media/' MEDIA_ROOT = os.path.join(BASE_DIR,'media')
修改后,models.ImageField生成的图片URL会直接指向主域名的媒体文件,子域名页面加载时会自动向主域名请求图片资源。
2. 配置跨域访问权限
子域名jp.naiuma.com请求主域名资源属于跨域操作,需要主域名的Django服务允许跨域请求。推荐使用django-cors-headers库快速实现:
- 先安装依赖库:
pip install django-cors-headers - 在
settings.py中添加配置:# 将corsheaders加入INSTALLED_APPS INSTALLED_APPS = [ ... 'corsheaders', ... ] # 加入中间件(注意顺序,需放在CommonMiddleware之前) MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... ] # 明确允许子域名跨域请求 CORS_ALLOWED_ORIGINS = [ "https://jp.naiuma.com", ] # 如果需要允许所有naiuma.com的子域名,可改用正则匹配 # CORS_ALLOWED_ORIGIN_REGEXES = [ # r"^https://.*\.naiuma\.com$", # ]
3. 测试验证
重启Django服务后,在jp.naiuma.com的页面中加载图片:
- 检查浏览器控制台是否存在跨域错误
- 查看图片的请求URL是否为
https://naiuma.com/media/xxx格式 - 确认图片能正常显示即配置成功
内容的提问来源于stack exchange,提问作者this_is_a_person
相关产品推荐
相关产品推荐

