目前正在使用Django 1.9。 我模型中的图像文件正在上传到
项目\媒体\ FILEPATH.jpg
但是,尝试使用没有\ media的文件路径显示图像。例如,当我在浏览器中访问我的localhost http://127.0.0.1:8000/media/FILEPATH.jpg时,我得到了404,因为Django的get请求正在寻找:
项目\ FILEPATH.jpg
如何使用\ media \?
让django正确地提供我的媒体文件更多信息,如果它可能有用:
settings.py:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.dirname(os.path.join(BASE_DIR, 'media'))
模型:
image = models.ImageField(upload_to='media', blank='true')
project urls.py根据文档我在urlpatterns之后有以下内容:
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
感谢您的帮助!
models.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')
views.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 %}
答案 0 :(得分:1)
确定
当您在模型上声明上传时,Django会自动检测到您的媒体路径是BASE_DIR / media,当您在模型上的upload_to中放入somthing时,您声明此图像必须保存在BASE_DIR / media / something < / p>
示例:如果我想将用户的图像保存到媒体中,我必须在模型上进行此操作
image = models.ImageField(upload_to='users/', blank='true')
我的图片将保存在localhost / media / users / FILEPATH.jpg
上媒体上的所有网址都会保存在您的&#39;图像&#39;所以你的形象领域只会说“用户/ FILEPATH.jpg”#39;但不是localhost / media /
这就是你需要在src中写/ media /的原因
<img src="/media/{{ image.image }}">
如果您将图像保存在名为&#39; image&#39;的字段上你不需要.url。
试试吧。