当前使用 Django 1.9。 我的模型中的图像文件已正确上传到
project\media\FILEPATH.jpg
但是,图像正尝试使用不带\media 的文件路径显示。例如,当我访问我的本地主机http://127.0.0.1:8000/media/FILEPATH.jpg时在我的浏览器中,我收到 404,因为 Django 的 get 请求正在寻找:
project\FILEPATH.jpg
如何让 django 使用\media\正确地提供我的媒体文件?
<小时/>更多信息(如果有任何用处):
设置.py:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.dirname(os.path.join(BASE_DIR, 'media'))
型号:
image = models.ImageField(upload_to='media', Blank='true')
项目 urls.py 根据文档,我在 urlpatterns 之后有以下内容:
静态(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
感谢您的帮助!
模型.py
class Post(models.Model):
ptype = models.ForeignKey('blog.Type', related_name='posts')
title = models.CharField(max_length = 100)
text = models.TextField()
published_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
class Image(models.Model):
post = models.ForeignKey('blog.Post', related_name='images')
image = models.ImageField(upload_to='media', blank='true')
View .py
class Posts(generic.ListView):
model = Post
context_object_name = 'posts'
template_name = 'blog/posts.html'
posts.html
{% extends "blog/base.html" %}
{% block content %}
{% for post in posts %}
<p><a href = "{% url 'blog:postdetail' pk=post.pk %}">{{post.title}}</a></p>
<p>{{post.text}}</p>
{% for image in post.image_set.all %}
<img src="{{ image.image.url }}">
{% endfor %}
{% endfor %}
{% endblock %}
最佳答案
好的
当你在模型上声明上传时,Django会自动检测到你的媒体路径是BASE_DIR/media,当你将一些东西放在模型上的upload_to中时,你声明该图像必须保存在BASE_DIR/media/something
示例:如果我想将用户的图像保存到媒体中,我必须在模型上进行此操作
image = models.ImageField(upload_to='users/', blank='true')
我的图像将保存在 localhost/media/users/FILEPATH.jpg
media/之后的所有 URL 都保存在“图像”字段中,因此图像字段只会显示“users/FILEPATH.jpg”,而不是 localhost/media/
这就是为什么你需要在 src 中写入/media/
<img src="/media/{{ image.image }}">
如果您将图像保存在名为“image”的字段中,您将不需要 .url。
尝试一下。
关于python - Django媒体文件路径不正确,缺少目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45575386/