0

朋友们,

我正在使用 Django 1.6,上周(!)一直在尝试在通过 Django 管理站点上传的网页上显示照片。

我知道这是一个常见的问题。我已经尝试阅读文档,像这个和这个这样许多 SO 问题都没有成功。

通过管理站点上传图像后,我可以看到图像存在于以下文件夹中:

/home/ian/django/mysite/cars/media/images/1.JPG

但是,当页面加载(或通过管理站点上传图片后尝试查看图片)时,我看到 404 错误。图片来源显示如下:

<li><img src="/media/images/1.JPG" height="420"/></li>

model.py具有以下字段:

photo = models.ImageField(upload_to='images/')

urls.py添加了以下内容:

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

模板是:

{% extends "base.html" %}
<h1>Here</h1>
<p>{{ collectiondetail.title }}</p>
{% for photo in photos %}
   <li><img src="{{ photo.photo.url }}" height="420"/></li>    
{% endfor %}    
{% endblock %}

最后settings.py是:

STATIC_ROOT = '/home/ian/django/mysite/cars/static/'

STATIC_URL = '/static/'

MEDIA_ROOT = '/home/ian/django/mysite/cars/media/'

MEDIA_URL = '/media/'

我错过了什么?

4

2 回答 2

1

您使用的 urls.py 片段仅用于开发,并且只能在调试模式下工作。你所拥有的一切看起来都是正确的,所以在 settings.py 中仔细检查DEBUG = True。从有关此功能的文档中:

此辅助函数仅在调试模式下有效,并且仅当给定前缀是本地的(例如 /media/)而不是 URL

于 2014-06-16T20:39:27.637 回答
0

感谢大家的帮助。上传文件时的默认权限是可以的。

最后设法将问题追查到两个设置。

MEDIA_URL 之前设置为:

MEDIA_URL = '/media/'

将其更改为:

MEDIA_URL = '/cars/media/'

将 urls.py 文件中的以下内容从

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.STATIC_ROOT,
        }),
)

现在图像按预期显示。

于 2014-06-22T12:41:22.533 回答