Django - 提供javascript,css和图像文件的静态文件

时间:2011-06-10 00:37:50

标签: django django-templates

我需要在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>

似乎没有任何内容传递给模板。

我做错了什么?

3 个答案:

答案 0 :(得分:9)

考虑到您使用的是Django 1.4或更高版本,以下是我的解释:

在Django 1.3中,静态文件与上传的文件(媒体)分开,现在,他们有自己的家。

在您需要的开发环境中提供静态文件(css,js,images等):

  1. 将这些文件放在各自应用的static子目录
  2. 确保django.contrib.staticfiles.finders.AppDirectoriesFinder中有settings.py(这是默认行为)
  3. 目录结构将是:

    __| 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/