【问题标题】:Django - Static files serving javascript , css and image filesDjango - 提供 javascript、css 和图像文件的静态文件
【发布时间】:2011-06-10 00:37:49
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

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

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

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

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

    目录结构将是:

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

    【讨论】:

    • 仅供参考:最近的 Django 版本推荐另一个 your_app 子目录(即project_root/your_app/static/your_app/)来放置文件以防止名称冲突:docs.djangoproject.com/en/dev/howto/static-files(注意右下角的版本选择器! )
    【解决方案2】:

    'django.core.context_processors.static' 包含在TEMPLATE_CONTEXT_PROCESSORS 变量中的settings.py 中。

    查看文档:Referring to static files in templates

    更新:

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

    def view1(request):
        ...
        context = RequestContext(...
        return render_to_response( ... , context )
    

    【讨论】:

    • 我包括在内 - 没有变化 - 一定还有另一个问题。
    • 一定是RequestContext 我忘了说。查看我的编辑。
    • 我了解到谷歌应用引擎通过更新 app.yaml 文件有一个不同的方法,这比 Django 提供的本地方法简单得多。我使用了扩展 /js/jquery.js - GAE 将 /js/ 映射到静态文件的特定目录。
    • 检查agiliq.com/blog/2013/03/serving-static-files-in-django。这可能有助于澄清一些事情。
    【解决方案3】:

    在较新版本的 Django 中,这是我在 html 模板中链接到静态文件的方式:

    &lt;script type="text/javascript" src="{% static 'admin/js/labeler.js' %}"&gt; &lt;/script&gt;

    关于 STATIC 的 Django 文档在这里: https://docs.djangoproject.com/en/1.9/howto/static-files/

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 2014-05-09
      • 2011-04-03
      • 2013-06-24
      • 2014-07-25
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 2014-02-26
      相关资源
      最近更新 更多