繁体   English   中英

Django不会从MEDIA_URL提供图片

[英]Django won't serve an image from MEDIA_URL

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

从开发工具中的控制台输出来看,它正在错误的文件夹中查找图像。 我不知道该如何解决。 我尝试设置MEDIA_URL,MEDIA_ROOT并添加urlpattern,就像在这里这里建议的那样

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

项目名称:“ wikb”,“博客”是一个应用程序: 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。

在模板中,你要使用.url得到一个真正的URL FieldFile (由包含在文件FileFieldImageField ):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM