Django媒体文件路径不正确,缺少目录

时间:2017-08-08 18:17:08

标签: python django django-models

目前正在使用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 %}

1 个答案:

答案 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。

试试吧。