希望的天 2023-04-22 14:59 采纳率: 100%
浏览 18
已结题

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设置我都试过了,没用

  • 写回答

2条回答 默认 最新

  • 澈丹丶 2023-04-23 10:33
    关注

    统一下配置:

    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
    MEDIA_URL = '/static/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'static')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月20日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂