我需要在Django项目中为静态文件提供服务。
我想将它们放在/ static目录中,并能够在我的模板中引用它们。
我一直在阅读文档中的“管理静态文件”,我很困惑。我按照说明操作,但无法使其正常工作。
1)我已将静态文件放在项目中每个应用程序的/ static下。
2)django.contrib.staticfiles包含在我的INSTALLED_APPS下。
我在设置中设置了以下变量:
STATIC_ROOT = '/static/'
STATIC_URL = '/static/'
在我的模板中,我有以下一行:
<script type="text/javascript" src={{ STATIC_URL }}/a_ajax.js></script>
然而,当我调出页面并查看来源时,该行是:
<script type="text/javascript" src=/a_ajax.js></script>
似乎没有任何内容传递给模板。
我做错了什么?
答案 0 :(得分:9)
考虑到您使用的是Django 1.4或更高版本,以下是我的解释:
在Django 1.3中,静态文件与上传的文件(媒体)分开,现在,他们有自己的家。
在您需要的开发环境中提供静态文件(css,js,images等):
static
子目录django.contrib.staticfiles.finders.AppDirectoriesFinder
中有settings.py
(这是默认行为)目录结构将是:
__| project_root/
____| your_app/
______| static/
________| test.css
________| some.js
因此,http://localhost:8000/static/test.css
的请求将被路由到your_app/static/test.css
。
请注意,在转到需要运行STATIC_ROOT
的生产环境之前,您无需更改./manage.py collectstatic
设置。
collectstatic
命令将从应用的static
子目录中收集文件,并将它们全部放在一个独特的位置(STATIC_ROOT
中定义的目录)
如果您要在生产中部署项目,请参阅./manage.py collectstatic documentation。
答案 1 :(得分:2)
包含'django.core.context_processors.static'
位于TEMPLATE_CONTEXT_PROCESSORS
的{{1}}变种中。
请参阅文档:Referring to static files in templates
在视图中,使用settings.py
对象而不是RequestContext
对象。
Context
答案 2 :(得分:1)
在较新版本的Django中,这是我链接到html模板中的静态文件的方式:
<script type="text/javascript" src="{% static 'admin/js/labeler.js' %}"> </script>
关于STATIC的Django文档在这里: https://docs.djangoproject.com/en/1.9/howto/static-files/