Django:可以显示媒体子文件夹中的图像吗?

Django Is it possible to display images from media subfolders?

提问人:M4ti06 提问时间:11/13/2023 更新时间:11/13/2023 访问量:29

问:

我有一个项目,管理员(编辑)正在将图像上传到数据库,它们将显示在文章和文章的 minatures(列表的形式)中。

我设法配置了显示媒体文件夹中的图像,但它没有按照我想要的方式工作。

我想在“媒体”文件夹的特定子文件夹中上传图像。例如: 博客/媒体/reviews_images 博客/媒体/reviews_minatures_images

我知道可以上传到特定文件夹,但这不是这个问题的重点。 我很想知道如何配置MEDIA ROOT以显示来自其不同子文件夹的图像。

现在,我可以将其中一个文件夹指定为 MEDIA ROOT,并且该文件夹中的图像正确显示,但另一个文件夹中的图像根本无法显示。

是否可以配置?

我的代码:

models.py

fs_reviews_images = FileSystemStorage(location="blog/media/reviews_images")
class ReviewsImages(models.Model):
    image = models.ImageField(storage=fs_reviews_images)
    description = models.CharField(max_length=50)
fs_reviews_minature_images = FileSystemStorage(location="blog/media/reviews_miniatures_images")


class ReviewsMiniaturesImages(models.Model):
    miniature_image = models.ImageField(storage=fs_reviews_minature_images)
    description = models.CharField(max_length=50)
    game_title = models.CharField(max_length=50)

    def __str__(self):
        return f"{self.game_title} {self.description}"

urls.py

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", views.HomeView.as_view(), name="home"),
    path("reviews", views.ReviewsListView.as_view(), name="reviews"),
    path("reviews/article/<pk>", views.ReviewsDetailView.as_view(), name="reviews-detail")
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py

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

MEDIA_URL = '/media/'

模板

<img src="{{ MEDIA_URL }}{{ review.review_minature_image.miniature_image }}" class="card-img-top"
         alt="{{ review.review_minature_image.description }}">

我尝试了几种解决方案。我试图在逗号之后的文档根参数中传递不同的文件夹,一些静态函数。这些都不像我预期的那样有效。我在文档中找不到解决方案。

我希望在一个MEDIA_URL下显示来自“媒体”文件夹的不同子文件夹的图像。

django django 模型 django 模板

评论

0赞 Ivan Starostin 11/13/2023
这回答了你的问题吗?Django:在视图中获取 ImageField url

答:

0赞 PMC 11/13/2023 #1

您可以简单地使用:.url

<img src="{{ review.review_minature_image.miniature_image.url }}">

例如,这是为以下属性提供的路径级别:

  • car.photo<ImageFieldFile: cars/chevy.jpg>
  • car.photo.name'cars/chevy.jpg'
  • car.photo.path'media/cars/chevy.jpg'
  • car.photo.url'http://www.example.com/cars/chevy.jpg'