django静态文件加载的方法


Posted in Python onMay 20, 2018

在模板中往往要加载静态文件,如CSS, JavaScript,图片等。那么这些文件在django中如何才能正确加载呢?

首先要在settings文件中进行设置,关于静态文件的设置选项主要由以下几项:

1. STATIC_URL = '/static/'

指定静态文件查找的url。这样设置后一般来说我们只要把静态文件放在 APP 中的 static 目录下就可以,但是有时我们有一些共用的静态文件,这时候可以设置 STATICFILES_DIRS 另外弄一个文件夹。

2.STATIC_ROOT =os.path.join(BASE_DIR, 'collected_static')

当运行 python manage.py collectstatic 的时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文件夹中找文件。注意有先后顺序,找到了就不再继续找了。

 那如何在模版中使用这些静态文件呢?可以参考如下代码,其中语句{% load static from staticfiles %}在这个模版文件中只需要出现一次。

{% load static from staticfiles %}

<link href="{% static" rel="external nofollow" css/sample.css" %}" rel="stylesheet">

用下边的方法也可

{% load static from staticfiles %}
{% static "css/sample.css" assample %}
<link href="{{ sample }}" rel="external nofollow" rel="stylesheet">

Django在运行时会自动将这些文件映射到STATIC_URL所给定的值下。也就是如,如果STATIC_URL = '/static/',那么在运行时,上边模版中的样例中的url会被替换为/static/css/sample.css。

这里做两点说明:

1.其实将静态文件路径硬编码在模版中也可以正常运行,如使用href="/static/css/sample.css" rel="external nofollow" ,前提是配置好了STATIC_URL和STATIC_DIRS。但并不推荐这么做,因为如果后来静态资源的位置发生了迁移,如使用独立服务器或者使用CDN,就要修改一大堆URL。而使用推荐的方法可以避免这个庞大的工作量,最多只需要修改STATIC_URL即可。

2.如果css文件中也使用了静态文件如css背景,则按照相对路径使用即可,因为浏览器解析css是会自动按照相对路径寻找到正确的URL。

在这里还需要强调的是,在开发阶段,Django使用的是内建的一个静态文件服务器,虽然在生产环境中也可以使用,但是它既不稳定也不安全。更好的方式是使用提供web服务的服务器如apache来服务静态文件。这需要你首先上传代码到服务器,然后运行collectstatic命令:python manage.py collectstatic 然后配置web服务器来为静态文件服务,如对Apache2进行配置。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python greenlet实现原理和使用示例
Sep 24 Python
Python的函数的一些高阶特性
Apr 27 Python
Python使用Pycrypto库进行RSA加密的方法详解
Jun 06 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
python交互式图形编程实例(一)
Nov 17 Python
python编写微信远程控制电脑的程序
Jan 05 Python
python生成lmdb格式的文件实例
Nov 08 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
Pandas时间序列基础详解(转换,索引,切片)
Feb 26 Python
python 引用传递和值传递详解(实参,形参)
Jun 05 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
python将图片转为矢量图的方法步骤
Mar 30 Python
django中静态文件配置static的方法
May 20 #Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 #Python
Python利用公共键如何对字典列表进行排序详解
May 19 #Python
Python中一些不为人知的基础技巧总结
May 19 #Python
Python + selenium自动化环境搭建的完整步骤
May 19 #Python
pandas中去除指定字符的实例
May 18 #Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 #Python
You might like
深入了解php4(1)--回到未来
2006/10/09 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
ajax 缓存 问题 requestheader
2010/08/01 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
简单谈谈python基本数据类型
2018/09/26 Python
对python 操作solr索引数据的实例详解
2018/12/07 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
python中count函数简单的实例讲解
2020/02/06 Python
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
会计专业毕业生自荐信范文
2013/12/20 职场文书
工作疏忽检讨书
2014/01/25 职场文书
带薪年假请假条
2014/02/04 职场文书
食品安全标语
2014/06/07 职场文书
房展策划方案
2014/06/07 职场文书
学生检讨书如何写
2014/10/30 职场文书
工地食品安全责任书
2015/05/09 职场文书
运动会加油稿30字
2015/07/21 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
一条慢SQL语句引发的改造之路
2022/03/16 MySQL
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js