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

afs*_*hin 7 django django-templates

我需要在我的Django项目中服务静态文件.

我想将它们放在/ static目录中,并能够在我的模板中引用它们.

我一直在阅读文档中的"管理静态文件",我很困惑.我按照说明操作但是无法让它工作.

1)我已将静态文件放在项目中每个应用程序的/ static下.

2)django.contrib.staticfiles包含在我的INSTALLED_APPS下.

我在设置中设置了以下变量:

STATIC_ROOT = '/static/'
STATIC_URL  = '/static/'
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我有以下几行:

<script type="text/javascript" src={{ STATIC_URL }}/a_ajax.js></script> 
Run Code Online (Sandbox Code Playgroud)

但是,当我调出页面并查看源代码时,该行是:

<script type="text/javascript" src=/a_ajax.js></script>
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

cai*_*aio 9

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

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

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

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

目录结构将是:

__| project_root/
____| your_app/
______| static/
________| test.css
________| some.js
Run Code Online (Sandbox Code Playgroud)

所以请求http://localhost:8000/static/test.css将被路由到your_app/static/test.css.

请注意,在STATIC_ROOT进入需要运行的生产环境之前,无需更改设置./manage.py collectstatic.

该collectstatic命令将从应用程序的static子目录中收集文件,并将它们全部放在一个独特的位置(定义的目录STATIC_ROOT)

如果要在生产中部署项目,请参阅./manage.py collectstatic文档.


man*_*nji 2

包含'django.core.context_processors.static'在你的TEMPLATE_CONTEXT_PROCESSORSvar 中settings.py。

请参阅文档:引用模板中的静态文件

更新:

并且在视图中,使用RequestContext对象而不是Context对象。

def view1(request):
    ...
    context = RequestContext(...
    return render_to_response( ... , context )
Run Code Online (Sandbox Code Playgroud)