java农一枚,
最近在学Django这种搭建起来比较容易的web框架,用起来确实比java web搭建简单多了
虽然java web发展历史悠久,各种解决方案都比较齐全,但对于现在的网络,更多的是快速搭建中小型网站,这样,javaweb就显得太过笨重
回归正题,在Django1.7.2配置静态文件
Django是python web开发的一个很出名的框架,国内python web框架资料比较多,比较全面的也就它了,而且就连python的作者也推荐
静态文件,就是web中的图片,js文件,css文件等
一般这些文件都放指定的文件目录,而这些静态文件一般是不会有访问限制的
网上配置Django的静态文件一搜一大堆,但大多都是1.4版本的,比较旧,而且经过我的测试,很多都不起作用,
当中可能是版本问题,也可能是我配置的遗漏
所以,一般遇到这种情况,只能看官方的
官网配置静态文件链接:https://docs.djangoproject.com/en/dev/howto/static-files/
好,看了一下官网的配置,十分简单
1、在settings.py的INSTALLED_APPS配置django.contrib.staticfiles,像这样
2、在settings.py文件配置
STATIC_URL = ‘/static/‘
3、在访问的页面配置
{% load staticfiles %}
<script type="text/javascript" src="{% static "js/jQuery-1.8.1.js" %}"></script>
4、在app下面建立static文件夹,将静态文件放里面,像这样
这样,就能访问静态文件了
根据上面的配置,我产生了好几个问题,经过自己的测试,都一一明了!
1、这样的配置,只能适用对用app的static文件夹,如果我有多个app,怎么办?因为一般来说,静态文件都是放在一个公共文件夹里面进行访问,
如果比较大型的网站,也有对应的web服务器来分担,这个就令到别论了
那我们怎么配置一个公共的静态文件夹呢?
只要在settings.py文件加上,STATICFILES_DIRS,像这样
STATICFILES_DIRS是一个元组,里面填写的是路径,路径最好用绝对路径
2、settings.py的STATIC_URL = ‘/static/‘能否不用static,而用其他?
可以的,STATIC_URL = ‘/ssss/‘
我这里将static改成ssss
那么访问我的页面也是能引入静态文件(这里我的静态文件是jQUery1.8.1)
上图可以看出,其实访问静态文件的url是/ssss/js/jQuery-1.8.1.js
也就是说STATIC_URL = ‘/ssss/‘就是把
页面的
<script type="text/javascript" src="{% static "js/jQuery-1.8.1.js" %}"></script>
的static替换成‘/ssss/‘
其实,我们直接访问http://localhost:8000/ssss/js/jQuery-1.8.1.js也能访问到这个jQuery文件
那么,页面的
{% load staticfiles %}
<script type="text/javascript" src="{% static "js/jQuery-1.8.1.js" %}"></script>
这两句,{% load staticfiles %}能否省略?
答案是不能,如果省略,访问会报错,报错信息如下
可以看出来,缺少{% load staticfiles %}是不能解析页面staitc这个关键字,
当然static这个关键字也是不能用其他字符替换,否则也会报错,这里我就不贴具体报错信息了
3、STATICFILES_DIRS配置多个路径的时候,而这些路径都有相同一个js或者css等静态文件,或加载哪一个?
经我测试,大概静态文件加载的逻辑是这样,
先根据元组的顺序遍历所有路由,如果静态文件在其中一个路径下找到,而后面的路径相同的静态文件是不会再次加载的,
4、settings.py中INSTALLED_APPS的django.contrib.staticfiles必须配置
属性STATIC_URL,如果添加了django.contrib.staticfiles,而缺少STATIC_URL,就会报如下错:
看报错信息就知道,必须配置STATIC_URL
到此,配置Django静态文件就到这
本博完~~~