无法在 Django 中使用动态图像 URL

Posted

技术标签:

【中文标题】无法在 Django 中使用动态图像 URL【英文标题】:Can't get Dynamic image URL work in Django 【发布时间】:2020-09-03 19:55:33 【问题描述】:

我正在尝试使用 Django 动态 url 显示一个 img,但我无法正确获取动态 url

url.py

    path('Obra/<int:id>/', views.detalle_obra, name="detalle_obra"),

work-single.html

 ...<img src="object.img.url"

views.py

def works(request, id):
    obj = Work.objects.get(id=id)
    context= 
        'object':obj
    
    return render(request, 'works-single.html',context)

当我渲染模板时,此图像会在控制台上弹出:

未找到:/Obra/1/static/mySiteWork/img/uploads/Proyecto Obra Cerrillos/P5230031.jpg

我不知道为什么显示“/Obra/1/”。当我打印 object.img.url 时,它只会显示“静态路径 static/mySiteWork/img/uploads/Proyecto Obra Cerrillos/P5230031.jpg”

静态文件在其余模板中工作正常

提前致谢。

【问题讨论】:

【参考方案1】:

我解决了这个问题: 我在 html 模板上更改了这个:

<img src="object.img.url">

为此:

<img src="/object.img.url">

不知道为什么......但它工作正常

【讨论】:

在 Django 3.x 中不再有默认的 MEDIA_URL。这意味着它创建了一个相对路径。您必须在 settings.py 中定义 MEDIA_URL。 MEDIA_URL 和 STATIC_URL 都应该以 / 开头和结尾。您没有正确完成这些条件中的一项或多项。【参考方案2】:

这很可能是因为设置文件中MEDIA_URL 变量的值。表单中的参数upload_toMEDIA_ROOT/MEDIA_URL 相关。 Django 计算用户上传文件的路径为MEDIA_ROOT/MEDIA_URL/file_url

您的设置中的 MEDIA_URL 似乎设置为“Obra/1”。

【讨论】:

嗨,MEDIA_URL 上的相同值适用于其他模板,当路径停止工作时,我尝试在 url.py 中发送值为“1”的参数。谢谢

以上是关于无法在 Django 中使用动态图像 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 模板中显示保存的、动态创建的图像?

为啥 Django 不在我的模板上显示我的动态背景图像

在Django中加载网页后调用动态python函数

在 Django 中,如何使用模板和 DB 对象中使用的动态 URL 实现样板 HTML 变量?

Django CMS 动态图像

在 Django 中以 html 模式加载动态数据