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

Ben*_*Ben 10 django django-templates

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

每当我尝试从模板中显示图像时,我只会获得损坏的图像链接图标.

我正在使用sqlite3服务器

settings.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/')
Run Code Online (Sandbox Code Playgroud)

models.py

class Image(models.Model):
    image = models.ImageField(upload_to = 'images/')
Run Code Online (Sandbox Code Playgroud)

views.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})
Run Code Online (Sandbox Code Playgroud)

url.py

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

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

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

<!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>
Run Code Online (Sandbox Code Playgroud)

我得到每个人的破碎图标.
浏览器源代码显示我:

<!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>
Run Code Online (Sandbox Code Playgroud)

这是有道理的,我只上传了一张照片.
如果我复制其中一个硬链接并将其放入其他一些html文件...它的工作原理

Ben*_*Ben 24

哦FFS ....

非常的

MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)

MEDIA_URL = 'http://127.0.0.1:8000/media/' 
Run Code Online (Sandbox Code Playgroud)

......尽管#'http://127.0.0.1:8000/media/'写在它旁边

工作img链接看起来像这样:

<img src="/media/images/photo_1.JPG" />
Run Code Online (Sandbox Code Playgroud)

你肯定需要:

static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

在url文件中也是


ARK*_*han 14

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

在settings.py中定义媒体url

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Run Code Online (Sandbox Code Playgroud)

然后在项目的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()
Run Code Online (Sandbox Code Playgroud)

然后您可以像这样引用模板中媒体文件夹中的图像:

<img src="media/path_to_image" />
Run Code Online (Sandbox Code Playgroud)

注意:不要忘记在生产环境的 settings.py 中将DEBUG标志设置为False 。