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中的异常处理相关语句基础学习笔记
Jul 11 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
Python中常用信号signal类型实例
Jan 25 Python
python MySQLdb使用教程详解
Mar 20 Python
Python简单定义与使用二叉树示例
May 11 Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
Apr 05 Python
python mac下安装虚拟环境的图文教程
Apr 12 Python
Django 通过JS实现ajax过程详解
Jul 30 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
Django用户认证系统如何实现自定义
Nov 12 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
php生成随机数或者字符串的代码
2008/09/05 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
php中switch语句用法详解
2015/08/17 PHP
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
Python解析json代码实例解析
2019/11/25 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
Django Form常用功能及代码示例
2020/10/13 Python
快速创建python 虚拟环境
2020/11/28 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
婴儿地球:Baby Earth
2018/12/25 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
求网格中的黑点分布
2013/11/06 面试题
员工生日会策划方案
2014/06/14 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript