Django开发图片路径永远有一个/media/

我是用Django开发,想把从图片上传到数据库然后显示到前端界面。在显示的时候出现了路径错误。
html代码如下:

        <div id="dis_pic" class="col-md-9">
            <div class="row">
                <div class="col-md-12">
                    {% if form.instance.image %}
                    <img style="width: 500px;height: 280px" src="{{ form.instance.image.url }}" alt="上传的图片">
                    {% else %}
                    <p>No image found.p>
                    {% endif %}
                div>
            div>
        div>
        <div id="b_submit" class="col-md-9">
            <form method="post" enctype="multipart/form-data">
                {% csrf_token %}
                {{ form.as_p }}
                <input  type="submit" value="上传">
            form>
        div>

我的models.py代码和forms.py代码设置的是:

class UploadImageForm(models.Model):
    title = models.CharField(max_length=50, verbose_name='输入图片备注')  # 存储图片标题
    image = models.ImageField(upload_to="image", verbose_name='图片')

    def __str__(self):
        return self.title

class ImageUploadForm(forms.ModelForm):
    class Meta:
        model = UploadImageForm
        fields = ('title', 'image',)

    def __init__(self, *args, **kwargs):
        # 调用父类的 __init__ 方法
        super().__init__(*args, **kwargs)
        # 获取 image 字段的 widget 对象,并将其样式设置为 display: inline-block
        self.fields['image'].widget.attrs.update({
            'style': 'display: inline-block;'
        })

我在views.py里进行了保存图片并传到前端:

def upload_image(request):
    if request.method == 'POST':
        form = ImageUploadForm(request.POST, request.FILES) # 如果是POST请求,将请求的数据绑定到表单对象中
        if form.is_valid(): # 如果表单数据有效
            form.save() # 保存上传的图片到数据库中
            print(form.instance.image.url)
            return render(request, 'upload_image.html', {'form': form})# 返回页面并显示上传的图片
    else:
        # 如果请求方法不是POST,创建一个空白的表单对象
        form = ImageUploadForm()
    return render(request, 'upload_image.html', {'form': form})

我的setting设置:

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'image')

为什么在这里form.save() 给我保存的路径是/media/image/9.jpg。而且前端src="{{ form.instance.image.url }}"接受的路径也是src="/media/image/9.jpg"
但是图片确实保存在了static下面:

img


有没有人能帮我解决一下这个问题,万分感谢!gpt说的什么改setting设置我都试过了,没用

统一下配置:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static')
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    问题分析:

    根据代码和问题描述,我们可以知道原因是图片的路径不正确,应该是缺少media前缀。需要在HTML代码中添加media前缀。

    解决方案:

    在HTML代码中添加MEDIA_URL前缀即可。修改img标签代码如下:

    <img src="{{ MEDIA_URL }}{{ image.image }}" alt="{{ image.title }}">
    

    这样就能够在前端显示正确的图片路径,即/media/images/9.jpg。

    完整的HTML代码如下:

    {% for image in images %}
    <div>
        <h3>{{ image.title }}</h3>
        <img src="{{ MEDIA_URL }}{{ image.image }}" alt="{{ image.title }}">
    </div>
    {% endfor %}
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^