朋友,
我正在使用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/'
我错过了什么?
答案 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,
}),
)
现在图像显示为预期。