我在Django中编写了一个小型电子商务应用程序。管理员用户将上传产品的照片。通过在urls.py
中指定以下处理程序,我在dev机器上工作了if settings.DEBUG:
urlpatterns += patterns('django.views.static',
(r'media/(?P<path>.*)', 'serve', {'document_root': settings.MEDIA_ROOT}),
)
在我的产品型号中,我有以下方法返回图片网址:
def detail_thumbnail_url(self) : return self.detail_thumbnail.url
从我的模板中:
<img src="{{ product.detail_thumbnail_url }}">
到处都有警告,没有让Django在生产中处理这个问题,但是我无处可以找到如何来处理这个问题。当然有人必须这样做!
我想从运行网络应用程序的同一台服务器上提供图像。
答案 0 :(得分:2)
您可能已经阅读过,建议不要采用这种方法。您必须将网络服务器与django应用程序一起使用,并通过WSGI连接它们。你基本上有三种选择......
这意味着您需要安装一个Web服务器(建议使用Nginx)并将其与WSGI接口一起配置,例如 Gunicorn 或uWSGI。此选项为您提供最大的自由度,并帮助您了解工作原理。
如果您希望使用所有此配置进行本地开发并省去安装和配置的负担,则可以使用pre-baked Vagrant VMs进行开发。
使用Heroku将您的应用部署到ElasticBeanstalk,docker/dokku,GAE等或您自己的PaaS(heroku式git部署)。此解决方案将为您处理大多数配置。这将节省您的时间(和金钱)。
如果您通过CDN提供静态信息,无论您是deploy to PaaS还是机器,都会更好 。例如,您可以在django-s3direct之类的django应用程序的帮助下以编程方式将用户照片和媒体直接上传到AWS S3,或者使用boto制作您自己的照片...(无需重新发明轮子)。
此选项可以减轻服务器负担并加快网站速度。
答案 1 :(得分:1)
您可以通过配置您的实际服务器(Apache或其他任何服务器)来实现,无论MEDIA_URL是什么,都可以从MEDIA_ROOT的任何地方提供文件。 Django应该与它无关。