【问题标题】:How to show an ImageField in Django template如何在 Django 模板中显示 ImageField
【发布时间】:2018-09-10 15:26:36
【问题描述】:

我从堆栈溢出中查看了这个问题。 question 1 question 2 关于在模板中显示图像字段并进行相应操作。但是,尽管图像已正确上传到文件夹,但图像未显示在模板中。

models.py

class Book(models.Model):
      book_thumbnail = models.ImageField(upload_to='images/%Y/%m/%d', blank=True, null=True)

views.py

def home(request):
    book = Book.objects.all()
    return render(request, 'books/books.html', context={'books': book})

模板.html

<img class="group list-group-image" src="{{ books.book_thumbnail.url }}" width='240' alt="alt" />

settings.py

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

urls.py

urlpatterns = [
    path('books/', views.home),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【问题讨论】:

  • 1) 当模板被渲染时,您需要检查模板是否显示正确的 url 而不是 {{ books.book_thumbnail.url }}。 2) 您需要检查 MEDIA_ROOT 显示的目录是否正确,相对路径可能存在问题
  • 一切正常
  • 您能否仅显示 {{ books.book_thumbnail.url }} 实际呈现的 url 以及如果您打印 MEDIA_ROOT 会看到什么

标签: django django-models


【解决方案1】:

打印媒体根目录对我有用。

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
print(MEDIA_ROOT)

这是我刚刚在 settings.py 中编辑的内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-31
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2014-08-31
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多