python - 如何将媒体目录中的图像显示到模板中?姜戈
问题描述
我正在使用 Django 创建自己的管理面板。但是如果我尝试显示从 Django 管理面板上传的图像,浏览器会告诉我找不到图像。
我已将 MEDIA_URL 和 MEDIA_ROOT 添加到 settings.py 但如果我得到并尝试打印此变量,我在模板中看不到任何内容。
settings.py
MEDIA_ROOT = '/'
MEDIA_URL = '/media/'
models.py
class HomePhoto(models.Model):
image_path = models.ImageField(upload_to='media/home/photos/', null=False, blank=False)
home = models.ForeignKey(Home, on_delete=models.CASCADE, related_name='home_photos', null=False, blank=True)
views.py
...
def get_context_data(self, **kwargs):
context = super(HomeDetailView, self).get_context_data()
context['title'] = context['home'].address
context['home_photos'] = home_models.HomePhoto.objects.filter(home=context['home'].pk)
return context
template.html
{% load static %}
{% get_media_prefix as MEDIA_URL %}
{% block content %}
...
{% for photo in home_photos %}
<div class="{% if forloop.first %}active{% endif %} item" data-slide-number="0">
<img src="{{ MEDIA_URL }}{{ photo.image_path }}">
</div>
{% endfor %}
...
{% endblock %}
解决方案
根据 Django 关于MEDIA_ROOT和管理文件的文档, METDIA_ROOT 应该具有服务器文件系统到媒体文件夹的绝对路径。'/' 表示 Linux 文件系统的根目录。以下是配置它的两种正确方法。
settings.py
# In case media folder is in your project folder
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# In case media folder is at different location, likes /var/www/media
MEDIA_ROOT = '/var/www/media'
推荐阅读
- python - 尝试使用 pip 安装看门狗时如何修复“错误:命令错误,退出状态为 1:”
- javascript - 如何使其将加密存储在数据库中并为用户解密
- python - 在给定次数的尝试后如何终止这个循环?
- sql-server - SQL将动态查询的值放入变量中
- android - 有没有办法在 Android.bp 中添加/删除模块?
- ruby-on-rails - 如何使用 rack.hijack 和 IO 流式传输下载而不会过早中断?
- node.js - 如何从nodejs接收reactjs上的cookie
- php - 为什么这个 ResourceCollection 不起作用?
- python-3.x - 使用可调用 WriteToBigQuery 的表参数时,无法将 Python 数据流模板保存到存储桶
- excel - 如何遍历列的所有行以使用 strTo 发送多封电子邮件?