Django 3.0图片:无法在模板中显示图片 [英] Django 3.0 images: Unable to display images in template

查看:223
本文介绍了Django 3.0图片:无法在模板中显示图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



这是shop.html的代码(我试图在其中显示图像)。

            <div class="container mt-4">
            <div class="row">
                {% for b in books|slice:":10" %}
                    <div class="col-lg-2 col-md-3 col-sm-4">
                        <div class="book-card">
                            <div class="book-card__book-front">
                                <img src={{MEDIA_URL}}{{b.cover.url}} alt="book-image">
                            </div>      
                        </div>
                                <div class="book-card__title">
                                    {{ b.title }}
                                </div>
                            </div>
                        </div>
                    </div>
                {% endfor %}
            </div>
        </div>

在这种模式下,我会根据出版商的ID(名称)放置书籍封面

def book_cover_path(instance, filename):
    return os.path.join(
    "covers", instance.publisher.user.username,  str(
        instance.pk) + '.' + filename.split('.')[-1]
)

class Book(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    title = models.CharField('Title', max_length=255)
    authors = models.ManyToManyField(Author, related_name='books_written')
    publisher = models.ForeignKey(Publisher, on_delete=models.DO_NOTHING, related_name='books_published')
    price = models.DecimalField('Price', decimal_places=2, max_digits=10)
    description = models.TextField('Description')
    upload_timestamp = models.DateTimeField('Uploading DateTime', auto_now_add=True)
    categories = models.ManyToManyField(Category, related_name='book_category')
    cover = models.ImageField(upload_to=book_cover_path, null=True,blank=True)

    class Meta:
        unique_together = ('title', 'publisher')
        get_latest_by = '-upload_timestamp'

这是视图中的视图。 py

def shop(req):
bookz = Book.objects.order_by('title')
var = {'books': bookz, 'range': 10}
return render(req, 'bookrepo/shop.html', context=var)

这是settings.py中的媒体设置。

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

这是我的文件夹结构,我确实把封面放到了media / covers / publisher / image.jpg中,即使我尝试了类似media / media / covers / publisher / image.jpg之类的东西

这是媒体目录的结构

我在Django控制台中未找到错误

找不到类似这样的错误

cover = models.ImageField(upload_to='covers', null=True,blank=True)


推荐答案

替换此行

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

             to

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

,因为这是保存文件的目录的绝对路径。

because it is the Absolute path to the directory that will hold the file.

并替换

<img src={{MEDIA_URL}}{{b.cover.url}} alt="book-image">

              to
<img src="{{b.cover.url}}" alt="book-image">

并将这些行添加到项目url.py文件中

and add these lines in projects url.py file

from django.conf import settings
from django.conf. urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),

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

这篇关于Django 3.0图片:无法在模板中显示图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆