Django静态文件配置

1 投票
4 回答
547 浏览
提问于 2025-04-17 18:19

我看了很多答案和问题,想找到一个明确的指南或者方法来处理这个问题,但似乎每个人都有不同的做法。能不能有人简单地告诉我,怎么在模板中提供静态文件呢?

假设我刚刚用Django 1.4创建了一个全新的项目,我需要做些什么才能显示图片呢?媒体文件和静态文件夹应该放在哪里呢?

4 个回答

0

这里是官方文档:

如何管理静态文件: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项目应用的外面。

0

创建的项目里应该有一个静态文件夹。把所有的资源(比如图片)放到这个文件夹里。然后,在你的HTML模板中,可以引用STATIC_ROOT,并添加资源的路径(这个路径是相对于静态文件夹的)。

2
  1. 把你的静态文件放到 <app>/static 这个文件夹里,或者在 STATICFILES_DIRS 里添加一个绝对路径。
  2. 配置你的网络服务器(不要用 Django 来提供静态文件)来提供 STATIC_ROOT 里的文件。
  3. STATIC_URL 指向网络服务器提供的基本网址。
  4. 运行 ./manage.py collectstatic
  5. 在你的渲染调用中确保使用 RequestContext,并用 {{ STATIC_URL }} 来给路径加前缀。
  6. 喝杯咖啡,给自己点个赞。

再多说一点关于在 Django 前面运行网络服务器的事。Django 实际上是一个应用服务器,它并不擅长提供静态文件。这就是为什么当 DEBUG=False 时,它会主动拒绝提供静态文件。而且,Django 的开发服务器不应该用于生产环境。这意味着在任何时候,Django 前面都应该有其他东西。可以是像 gunicorn 这样的 WSGI 服务器,或者像 nginx 或 Apache 这样的“真正的”网络服务器。

如果你在使用反向代理(比如 nginx 或 Apache),你可以把 /static 绑定到文件系统中的一个路径,而其他的流量则通过 Django。这意味着你的 STATIC_URL 可以是相对路径。否则,你就需要使用绝对网址。

撰写回答