django

Django 1.6 静态文件处理

之前在版本不对的教程里面没有提及有关 static 处理的问题,但是做项目的时候已经遇到问题了;

在整个站点的 settings.py 下面有个 STATIC_URL = ‘/static/’ 的选项,但是路由也没有额外的配置;

于是当时搞不定上百度各种找,最后发现最简便的方法就是在 settings.py 里面加上:

STATICFILES_DIRS = (os.path.abspath('static'),)

那么,其中 STATIC_URL 指定的实际上是静态文件的路由,而 STATICFILES_DIRS 指定的是静态文件在服务器目录上的路径; 这样之后,直接通过 /static/… 的地址访问就可以访问到具体的静态文件;

MORE

但是今天重看 1.6 的文档,再来学习一下官方的解决方案,在这里做一下记录。

1. All is simple

原来一切这么容易,只需要在 app 下面建立 static 目录,然后通过 /static/… 即可直接找到静态文件,无需任何配置!

内部的原理:

django 会通过 STATICFILES_FINDERS 这个配置来查找所有 installed_apps 里面的 app 下面的 static 子目录,来尝试找到目标路由指定的文件,并返回所匹配到的第一个;

2. 对静态文件划分命名空间

划分一个命名空间对于避免不同的 app 之间发生命名冲突是一个官方的解决方案;

所以建议:

在每个 app 下面创建 static 文件夹,然后在里面创建一个与 app 同名的文件夹,静态文件放在里面;

然后具体引用的时候,在路径上加好前缀就行,这样可以避免命名冲突;

3. 在模板中引用

首先,我们不应当硬编码任何 url,这是共识;

使用任何静态资源的引用 url 之前,应当先对静态文件做一个全局声明: {% load staticfiles %}

然后,具体引用静态资源时: {% static ‘[PATH]’ %} 即可渲染一个 对应静态文件的 url

4. 相对路径和绝对路径

从第 2 点可以看出,每个 app 的静态文件已经成为了一个闭包; 但是在静态文件中,是无法使用 {% static %} 这样的办法来动态生成一个 url 的。

另一点,在静态文件中不应该引用动态路由的文件(这个划分应该很好理解,减少耦合);

于是,在动态的路由视图模板中,应当总是使用 {% static %} 标签来引入静态文件,这相当于是一个绝对路径,而在静态文件中,则只应该使用相对路径来访问其他静态文件(例如在 css 里面访问图片);


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2014/03/django-static.html【Django 1.6 静态文件处理】

发表评论

电子邮件地址不会被公开。 必填项已用*标注