django - 媒体文件中的图像不会显示在 django 模板中

标签 django django-templates

我是 django 的新手,我一直在玩上传图片然后显示它们。 ...很好地展示它们。

每当我尝试从模板显示图像时,我都会得到损坏的图像链接图标。

我正在使用 sqlite3 服务器

设置.py

ROOT_DIR = os.path.dirname(os.path.dirname(__file__))
def location(f):
    return os.path.join(ROOT_DIR, f)
MEDIA_URL = 'http://127.0.0.1:8000/media/'
MEDIA_ROOT = location('media/')

模型.py

class Image(models.Model):
    image = models.ImageField(upload_to = 'images/')

View .py

from imageupload.settings import MEDIA_ROOT, MEDIA_URL

def main(request):
    imgs = Image.objects.all()
    return render_to_response('index.html', {'images': imgs, 'media_root': MEDIA_ROOT, 'media_url': MEDIA_URL})

网址.py

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

现在我刚刚使用管理员上传图片。这似乎工作正常,他们去我期望的地方

但是当我尝试显示它们时:
模板

<!DOCTYPE html>
<html>
    <img src="<correct path to project>/media/images/photo_1.JPG" />

    {% for img in images %}
    <img src="{{ media_root }}{{ img.image.name }}" />
    <img src="{{ media_url }}{{ img.image.name }}" />
    <img src="{{ img.image.url }}" />
    {% endfor %}
</html>

我得到每个 splinter 的图标。
浏览器源代码向我展示了:

<!DOCTYPE html>
<html>
    <img src="<correct path to project>/media/images/photo_1.JPG" />    
    <img src="<correct path to project>/media/images/photo_1.JPG" />    
    <img src="http://127.0.0.1:8000/media/images/photo_1.JPG" />
    <img src="http://127.0.0.1:8000/media/images/photo_1.JPG" />
</html>

有道理,我只上传了一张照片。
如果我复制其中一个硬链接(hard link)并将其放入其他一些 html 文件中......它可以工作

最佳答案

对我来说,我做了以下两件事:

中定义媒体 url设置.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

然后在项目的 urls.py , 为开发和生产目的定义服务 url:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('django_app.urls')),
]
# Serving the media files in development mode
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
else:
    urlpatterns += staticfiles_urlpatterns()

然后您可以像这样引用模板中媒体文件夹中的图像:
<img src="media/path_to_image" />

注意:不要忘记设置 调试 标记为 错误 在 settings.py 中进行生产。

关于django - 媒体文件中的图像不会显示在 django 模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10776969/

相关文章:

Django和crispy form,如何在crispy Layout中添加id和name

django - 如何在 View 中包装 Django 表单向导?

Django 查看值错误

Django CMS 和 Rosetta : Can't get template messages translated

python - 连接httpresponse对象django

javascript - 如何在存在静态 Assets 的情况下不启动 EmberJs 应用程序

html - 在 Django 中加载基于 Bootstrap 的主页时出现 404 错误

python - DRF 序列化器深度使字段在创建时被忽略

python - Django 中的 "app"是什么?

python - 在 Django Admin 中隐藏 Auth 部分