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

如何在Django API响应中返回托管服务器上的图片链接

解决Django API返回图片链接为本地地址的问题

问题场景

在托管服务器上通过python manage.py runserver 0.0.0.0:8000运行Django应用时,API返回的图片链接是本地127.0.0.1:8000地址,期望替换为域名形式(如domain.api/media/xxx.jpg)。

解决方案

方案一:通过全局配置修改域名

修改项目的settings.py文件:

  1. 允许指定域名访问
    将你的域名添加到ALLOWED_HOSTS列表,确保Django接受该域名的请求:
ALLOWED_HOSTS = ['domain.api', '服务器公网IP']
  1. 配置媒体文件URL
    设置MEDIA_URL为目标路径:
# 若要返回相对域名的路径(如domain.api/media/xxx)
MEDIA_URL = '/media/'
# 若要返回完整域名路径
MEDIA_URL = 'https://domain.api/media/'

同时确认MEDIA_ROOT正确指向服务器上媒体文件的存储目录:

import os
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  1. 反向代理适配(如使用Nginx)
    如果域名通过反向代理指向Django服务,添加以下配置让Django识别真实请求域名:
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')  # 启用HTTPS时添加

方案二:序列化器自定义字段返回值

在EventSerializer中重写image字段的序列化逻辑,实现更灵活的控制:

from rest_framework import serializers
from .models import Event

class EventSerializer(serializers.ModelSerializer):
    image = serializers.SerializerMethodField()

    class Meta:
        model = Event
        fields = ['title', 'description', 'image', 'created_at']

    def get_image(self, obj):
        if obj.image:
            return f"domain.api{obj.image.url}"
        return None

验证

修改完成后重启Django服务:

python manage.py runserver 0.0.0.0:8000

再次请求API即可得到期望的图片链接格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:20:16