django静态文件加载的方法
在模板中往往要加载静态文件,如CSS,JavaScript,图片等。那么这些文件在django中如何才能正确加载呢?
首先要在settings文件中进行设置,关于静态文件的设置选项主要由以下几项:
1. STATIC_URL='/static/'
指定静态文件查找的url。这样设置后一般来说我们只要把静态文件放在APP中的static目录下就可以,但是有时我们有一些共用的静态文件,这时候可以设置STATICFILES_DIRS另外弄一个文件夹。
2.STATIC_ROOT=os.path.join(BASE_DIR,'collected_static')
当运行pythonmanage.pycollectstatic的时STATIC_ROOT文件夹是用来复制所有STATICFILES_DIRS文件夹中的文件,以及各app中static中的文件。把这些文件放到一起是为了用apache等部署的时候更方便。
3.
STATICFILES_DIRS=( ("images",os.path.join(STATIC_URL,'images').replace('\\','/')), ("css",os.path.join(STATIC_URL,'css').replace('\\','/')), ("js",os.path.join(STATIC_URL,'js').replace('\\','/')), )
其它存放静态文件的文件夹,可以用来存放项目中公用的静态文件,里面不能包含STATIC_ROOT如果不想用STATICFILES_DIRS可以不用,都放在app里的static中也可以。
4.
STATICFILES_FINDERS=( "django.contrib.staticfiles.finders.FileSystemFinder", "django.contrib.staticfiles.finders.AppDirectoriesFinder" )
默认设置,相当于搜索引擎,Django默认会在STATICFILES_DIRS中的文件夹和各app下的static文件夹中找文件。注意有先后顺序,找到了就不再继续找了。
那如何在模版中使用这些静态文件呢?可以参考如下代码,其中语句{%loadstaticfromstaticfiles%}在这个模版文件中只需要出现一次。
{%loadstaticfromstaticfiles%}
用下边的方法也可
{%loadstaticfromstaticfiles%} {%static"css/sample.css"assample%}
Django在运行时会自动将这些文件映射到STATIC_URL所给定的值下。也就是如,如果STATIC_URL='/static/',那么在运行时,上边模版中的样例中的url会被替换为/static/css/sample.css。
这里做两点说明:
1.其实将静态文件路径硬编码在模版中也可以正常运行,如使用href="/static/css/sample.css"rel="externalnofollow",前提是配置好了STATIC_URL和STATIC_DIRS。但并不推荐这么做,因为如果后来静态资源的位置发生了迁移,如使用独立服务器或者使用CDN,就要修改一大堆URL。而使用推荐的方法可以避免这个庞大的工作量,最多只需要修改STATIC_URL即可。
2.如果css文件中也使用了静态文件如css背景,则按照相对路径使用即可,因为浏览器解析css是会自动按照相对路径寻找到正确的URL。
在这里还需要强调的是,在开发阶段,Django使用的是内建的一个静态文件服务器,虽然在生产环境中也可以使用,但是它既不稳定也不安全。更好的方式是使用提供web服务的服务器如apache来服务静态文件。这需要你首先上传代码到服务器,然后运行collectstatic命令:pythonmanage.pycollectstatic然后配置web服务器来为静态文件服务,如对Apache2进行配置。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。