Django 1.9.7
你能帮我处理用户上传的图片吗?我设法保存图像。
但我无法向他们展示。到目前为止,这完全是关于开发阶段(非生产)。
最底层的代码示例显示我执行时的html"查看页面源"在Chrome中。这" src =" / home / michael / workspace /..."是绝对的道路。如果我创建这样的html并在没有web服务器的浏览器中打开它,它将起作用。
但是,我运行Django dev服务器时,图像无法显示。
你能帮我一把吗。
/pharchive/pharchive/settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, '../media/')
MEDIA_URL = os.path.join(BASE_DIR, '../media/')
/pharchive/pharchive/urls.py
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
/pharchive/masterdocument/models.py
class Image(AbstractDocument):
image = models.ImageField(upload_to='images/%Y/%m/%d')
/pharchive/masterdocument/views.py
class ImageDetailView(DetailView):
model = Image
/pharchive/masterdocument/templates/masterdocument/image_detail.html
<html>
<img src="{{ object.image.url }}"/>
</html>
查看源:http://localhost:8000/images/6/
<html>
<img src="/home/michael/workspace/pharchive/media/images/2016/06/29/Screenshot_from_2016-02-23_205205.png"/>
</html>
答案 0 :(得分:0)
MEDIA_URL
应该是上传媒体的根网址,例如:
MEDIA_URL = '/media/'
您已将其设置为复制上传媒体的文件夹的路径。
编辑:根据要求提供有关其工作原理的更多信息。
您要做的是存储用户提交的图像文件,然后将其提供给其他用户。要存储文件,您需要在文件系统中指定存储位置,在您的情况下:
/home/michael/workspace/pharchive/media/images/2016/06/29/Screenshot_from_2016-02-23_205205.png
Django通过连接这些部分来构建这条路径:
MEDIA_ROOT
ImageField
的插值upload_to
属性,此处'images/%Y/%m/%d'
插值为images/2016/06/29
Screenshot_from_2016-02-23_205205.png
。 Django还在数据库中存储文件的路径,相对于MEDIA_ROOT
,在您的情况下images/2016/06/29/Screenshot_from_2016-02-23_205205.png
现在,要将存储的文件提供给用户,首先需要通过URL访问它,此URL是通过将MEDIA_URL
设置连接到数据库中存储的路径(可能已修改为使其生成)来构建的与URL兼容),此处为/media/images/2016/06/29/Screenshot_from_2016-02-23_205205.png
。
最后一步是在访问以前构造的URL时实际提供文件,通常在开发和生产中不会以相同的方式完成。
在开发中,Django devserver将用于提供文件,这就是为什么在DEBUG
为真时添加url模式的原因。该url模式会将以MEDIA_URL
(/media/
)开头的任何URL映射到将读取存储文件并返回其内容的视图。
出于性能原因,在制作过程中,您将使用专用的Web服务器来提供上传的文件。