在开发过程中,我上传的图片正在显示,但在制作时却没有。
以下是代码:
#settings.py
STATIC_ROOT = '/home/eakdev/webapps/my_static'
MEDIA_ROOT = '/home/eakdev/webapps/my_static/media'
MEDIA_URL = '/media/'
#urls.py When I add this during development my images are showing correctly
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
#base.html
<img class="img-responsive" src="{{ project.preview.url }}" alt="">
在阅读了与此相关的一些问题之后,我认为其不起作用的原因是我的代码使用dev服务器来提供媒体文件,这只对开发有利。我有什么改变才能在生产中发挥作用?
答案 0 :(得分:1)
在制作中提供媒体文件的首选方法是设置前端网络服务器或CDN以便为其提供服务。
例如,在nginx中,您在服务器配置中包含以下部分:
location /media/ { # Should match MEDIA_URL
alias /path/to/mysite.com/media/; # Should match MEDIA_ROOT
}
在Apache:
Alias /media/ /path/to/mysite.com/media/ # MEDIA_URL MEDIA_ROOT
<Directory /path/to/mysite.com/media> # MEDIA_ROOT
Require all granted
</Directory>
这些是最低限度的指令,你当然可以通过缓存,访问控制等方式做更多事情。
答案 1 :(得分:0)
我遇到了同样的问题。 在settings.py中,我评论了这些行:
#MEDIA_ROOT = '/home/prk/Documents/prakhar/mysite/media'
#MEDIA_URL = '/media/'
并添加以下行:
MEDIA_ROOT = os.path.join(BASE_DIR, "..", "www", "media")
MEDIA_URL = '/media/'
当您在localhost上运行服务器时,它会出错,但在生产中它会正常工作。
我的项目结构是: / Wrapper / mysite /(... 和 ... 和 manage.py 和 mysite 和 .. 。)
在包装目录中,我有一个名为www的文件夹,里面有一个名为media的文件夹。
希望这有帮助。