Python Django媒体文件路径不正确,缺少目录
目前正在使用Django 1.9。 我的模型中的图像文件正在正确上载到 project\media\FILEPATH.jpg 但是,正在尝试使用不带\media的文件路径显示图像。例如,当我在浏览器中转到我的本地主机时,我得到一个404,因为Django的get请求正在查找: project\FILEPATH.jpg 如何让django使用\media\正确提供媒体文件Python Django媒体文件路径不正确,缺少目录,python,django,django-models,Python,Django,Django Models,目前正在使用Django 1.9。 我的模型中的图像文件正在正确上载到 project\media\FILEPATH.jpg 但是,正在尝试使用不带\media的文件路径显示图像。例如,当我在浏览器中转到我的本地主机时,我得到一个404,因为Django的get请求正在查找: project\FILEPATH.jpg 如何让django使用\media\正确提供媒体文件 如有任何用途,请提供更多信息: settings.py: MEDIA_URL = '/media/' MEDIA_ROOT
如有任何用途,请提供更多信息:
settings.py:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.dirname(os.path.join(BASE_DIR, 'media'))
型号:image=models.ImageField(上传到`media',blank='true')
project urls.py根据文档,我有以下URL模式:
static(settings.MEDIA\u URL,document\u root=settings.MEDIA\u 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 %}
{%extends“blog/base.html”%}
{%block content%}
{posts%%中的post为%s}
{{post.text}
{post.imageu set.all%中的图像为%s}
{%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都保存在“image”字段中,因此您的image字段只会显示“users/FILEPATH.jpg”,而不会显示localhost/media/
这就是为什么您需要在src中编写/media/的原因
<img src="/media/{{ image.image }}">
如果将图像保存在名为“image”的字段中,则不需要.url
试试看。发布html部分。是否您忘记将
.url
添加到src
属性?例如:
@hanseffranz我为这个问题添加了更多的上下文。感谢您的回复。我可以想象,{%for image in post.image\u set.all%}
中的关键字image
可能会混淆Python,我可以简单地称之为x
。使用
时,第一幅图像
指的是四循环变量,而不是您定义的模型。或者至少我认为问题可能在那里。如果将脚循环中的image
更改为x
(仅在src
部分中没有),会发生什么情况?如果不删除for循环,会发生什么情况?url正确吗?@Hanseffranz在对您的建议进行了进一步的修改后,我得到了要显示的图像,代码如下:{%for x in post.images.all%}{%endfor%}谢谢您的帮助!我真的不明白为什么会这样,显然我的媒体文件路径是/media/media/sav2017.jpg,而不仅仅是/media。但我会进一步调查。再次感谢。它至少现在起作用了,我只需要找出原因。是的,没问题,很高兴能帮助别人开始:)我明白你的意思。upload_to属性已经识别出媒体的位置,这就是为什么我无法找到我的路径,因为它正在搜索/media/media。我已经修改了我的上传目录,加入了一个子目录,这更有意义。谢谢你的帮助!!!!