您正在混合和匹配 Django 1.3 前后的静态文件处理。最初所有的静态文件都是从 MEDIA_URL 提供的,但是 Django 1.3 引入了 staticfiles contrib 包和相关的 STATIC_ROOT 和 STATIC_URL 设置。 django.views.static.serve 使用了您尚未设置的新静态文件应用程序。
假设您正在运行 Django 1.3,首先,您需要将“静态文件”添加到您的 INSTALLED_APPS。然后,您需要定义STATIC_ROOT 和STATIC_URL。标准位置是一个名为“static”的项目根目录。
您还需要添加 staticfiles 模板上下文处理器:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.static',
)
这将使STATIC_URL 变量在您的模板中可用,因此您可以使用{{ STATIC_URL }}css/style.css 之类的内容引用您的资源
您的所有静态资源还需要进入名为“static”的应用级目录。实际的项目根级“静态”目录从不直接使用。这只是collectstatic 管理命令转储所有静态资源以用于生产的地方。
如果您想要项目范围内的静态资源(不绑定到任何特定应用程序),您将需要一个完全独立的目录(即与 MEDIA_ROOT 不同或 STATIC_ROOT) .我倾向于使用一个名为“资产”的东西。然后,您需要告诉 Django 在此处查找静态资源以及 STATICFILES_DIRS 设置:
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), 'assets'), # or whatever you named it
)
MEDIA_ROOT/MEDIA_URL 现在仅用于用户上传(例如,通过FileFields 和ImageFields 创建的任何文件,因此您仍然需要它,但您永远不会手动存储任何内容。
当您进入生产阶段时,您的网络服务器将需要分别在MEDIA_URL 和STATIC_URL 为MEDIA_ROOT 和STATIC_ROOT 提供服务。您还需要运行:
$ python manage.py collectstatic
让Django将你所有的静态文件编译到STATIC_ROOT指定的目录中。