【问题标题】:Django won't serve an image from MEDIA_URLDjango 不会提供来自 MEDIA_URL 的图像
【发布时间】:2020-01-15 06:52:52
【问题描述】:

建立个人博客的初学者。得到一个带有 ImageField 的简单模型。无论我尝试什么,Django 都不会提供图像。

从开发工具中的控制台输出判断,它正在错误的文件夹中寻找图像。我不知道如何解决这个问题。我尝试设置 MEDIA_URL、MEDIA_ROOT 并添加一个 urlpattern,就像建议的 here 和 here

我已经通过管理面板上传了图片,它的位置是 media/images/stockmarket.jpg。但由于某种原因,服务器正在 /blog/images/stockmarket.jpg 此处寻找图像

项目名称:'wikb','blog'是一个应用程序: project_file_system

models.py

from django.db import models

class Post(models.Model):
    title = models.CharField('Post Title', max_length=200)
    preview = models.CharField('Post Preview', max_length=400)
    thumbnail = models.ImageField('Post Picture', upload_to='images/', blank=True)

view.py

from django.shortcuts import render
from django.http import HttpResponse

from .models import Post

def home(request):
    all_posts = Post.objects.all()
    hero_post = all_posts[0]
    context = {'hero_post': hero_post, 'all_posts': all_posts}
    return render(request, 'blog/home.html', context=context)

HTML

<div class="hero">
    <a href="#" class="hero__link" style="background-image: url({{hero_post.thumbnail}})">
        <article class="hero__article">
            <h2 class="hero__heading">{{hero_post.title}}</h2>
            <p class="hero__preview">{{hero_post.preview}}</p>
        </article>
    </a>
</div>

settings.py

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

全局 urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('blog/', include('blog.urls')),
    path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这是我的第一个 Django 项目,请像我 5 岁一样解释。

更新:我在模板中引用对象时忘记添加 .url。

【问题讨论】:

  • 您是否遇到任何错误?
  • 只有这个:[13/Sep/2019 14:04:11] "GET /blog/media/images/stockmarket.jpg HTTP/1.1" 404 2314 Not Found: /blog/images/股票市场.jpg
  • 我相信你的 URL 应该是 /media/... 而不是 /blog/media/...
  • 你在ImageField中分配了两个upload_to参数,为什么?
  • 是的。但这就是 django 试图提供的服务,我不知道如何改变它。

标签: python django


【解决方案1】:

在模板中,您需要使用.url 来获取FieldFile(由FileField 或ImageField 包含的文件)的真实URL:

<a href="#" class="hero__link" style="background-image: url({{ hero_post.thumbnail.url }})">

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 2021-08-04
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2011-09-27
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多