如何链接到django 1.8中的站点范围的静态文件?

时间:2015-06-05 22:47:40

标签: css django static

目前的结构:

MySite
  |--MySite
  |    |--static
  |         |--MySite
  |              |-- site_wide.css
  |--MyApp
       |--static
            |--MyApp
                 |-- app_specific.js
                 |-- app_specific.css

settings.py:

STATIC_URL = "/static/"

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "/MySite/static/"),
)

使用以下代码,我能够成功链接到app_specific.jsapp_specific.css,但无法链接site_wide.css

{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'MyApp/app_specific.css %}" />
<link rel="stylesheet" type="text/css" href="{% static 'MySite/site_wide.css' %}" />

... site body ...

<script type="text/javascript" src="{% static 'MyApp/app_specific.js' %}" ></script>

在检查生成的html时,第二个链接的href为:

href="/static/MySite/site_wide.css"

不存在。

我目前的理解是,django将在STATIC_URL定义的路径中搜索我的链接文件,然后(如果没有找到)通过SATICFILES_DIRS中列出的路径进展,但显然从未查找过在STATICFILES_DIRS

中指定的路径

我是django的新手,想了解它是如何运作的。其他一些类似的问题提到collectstaticfiles等类似问题,但都非常不清楚。

非常感谢任何帮助!

P.S。我所知道的一切都来自官方Django 1.8教程/文档,所以请不要发布已弃用的答案。仅限1.8。

1 个答案:

答案 0 :(得分:1)

尝试将os.path.join(BASE_DIR, '/MySite/static/')更改为os.path.join(BASE_DIR, 'MySite/static'),i。即删除转发/。我想原因是os.path.join的工作原理

>>> os.path.join('/foo', '/bar')
'/bar'
>>> os.path.join('/foo', 'bar')
'/foo/bar'