在网页中显示上传的媒体

时间:2014-06-16 20:12:38

标签: django django-file-upload

朋友,

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

我知道这是一个常见的问题。我试过阅读documentation,这个one以及one等众多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/'

我错过了什么?

2 个答案:

答案 0 :(得分:1)

您使用的urls.py代码段仅用于开发,仅适用于调试模式。您拥有的所有内容都是正确的,因此请在settings.py DEBUG = True中仔细检查。来自此功能的docs

  

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

时才有效

答案 1 :(得分: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,
        }),
)

现在图像显示为预期。