Django静态文件配置
我看了很多答案和问题,想找到一个明确的指南或者方法来处理这个问题,但似乎每个人都有不同的做法。能不能有人简单地告诉我,怎么在模板中提供静态文件呢?
假设我刚刚用Django 1.4创建了一个全新的项目,我需要做些什么才能显示图片呢?媒体文件和静态文件夹应该放在哪里呢?
4 个回答
这里是官方文档:
如何管理静态文件:https://docs.djangoproject.com/en/1.4/howto/static-files/
关于静态文件的一般信息:https://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/
如果你打算在生产环境中部署,那么你应该阅读这里的内容:https://docs.djangoproject.com/en/1.4/howto/static-files/#staticfiles-production
一般来说,我们会把静态文件和媒体文件夹放在django项目应用的外面。
创建的项目里应该有一个静态文件夹。把所有的资源(比如图片)放到这个文件夹里。然后,在你的HTML模板中,可以引用STATIC_ROOT,并添加资源的路径(这个路径是相对于静态文件夹的)。
- 把你的静态文件放到
<app>/static
这个文件夹里,或者在STATICFILES_DIRS
里添加一个绝对路径。 - 配置你的网络服务器(不要用 Django 来提供静态文件)来提供
STATIC_ROOT
里的文件。 - 把
STATIC_URL
指向网络服务器提供的基本网址。 - 运行
./manage.py collectstatic
。 - 在你的渲染调用中确保使用
RequestContext
,并用{{ STATIC_URL }}
来给路径加前缀。 - 喝杯咖啡,给自己点个赞。
再多说一点关于在 Django 前面运行网络服务器的事。Django 实际上是一个应用服务器,它并不擅长提供静态文件。这就是为什么当 DEBUG=False
时,它会主动拒绝提供静态文件。而且,Django 的开发服务器不应该用于生产环境。这意味着在任何时候,Django 前面都应该有其他东西。可以是像 gunicorn 这样的 WSGI 服务器,或者像 nginx 或 Apache 这样的“真正的”网络服务器。
如果你在使用反向代理(比如 nginx 或 Apache),你可以把 /static
绑定到文件系统中的一个路径,而其他的流量则通过 Django。这意味着你的 STATIC_URL
可以是相对路径。否则,你就需要使用绝对网址。