【发布时间】:2018-01-16 10:34:36
【问题描述】:
当前使用 Django 1.9。 我的模型中的图像文件正在正确上传到
项目\媒体\FILEPATH.jpg
但是,图像正在尝试使用不带 \media 的文件路径显示。例如,当我在浏览器中访问我的本地主机 http://127.0.0.1:8000/media/FILEPATH.jpg 时,我得到一个 404,因为 Django 的 get 请求正在寻找:
项目\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')
project urls.py 根据文档,我在 urlpatterns 之后有以下内容:
static(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')
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 %}
【问题讨论】:
-
发布 html 部分。会不会是您忘记在
src属性中添加.url?例如:<img src="{{ user.userprofile.image.url }}"> -
@hansTheFranz 我为这个问题添加了更多上下文。感谢您的回复。
-
我可以想象
{% for image in post.image_set.all %}中的关键字image会混淆Python,我就简单地称它为x。当您使用<img src="{{ image.image.url }}">时,第一个image指的是四个循环变量,而不是您定义的模型。或者至少我认为问题可能存在。如果您将脚循环中的image更改为x会发生什么(只是在src部分中没有)以及当您不删除for 循环时会发生什么?网址正确吗? -
@hansTheFranz 在对您的建议进行了更多修改后,我已经使用以下代码显示图像: {% for x in post.images.all %} {% endfor %} 感谢您的帮助!我真的不明白为什么会这样,显然我的媒体文件路径是/media/media/sav2017.jpg 而不仅仅是/media。但我会进一步调查。再次感谢。至少现在它正在工作,我只需要弄清楚为什么。
-
是的,没问题,很高兴能帮助别人开始 :)
标签: python django django-models