简单介绍Python的Django框架加载模版的方式


Posted in Python onJuly 20, 2015

一般说来,你会把模板以文件的方式存储在文件系统中,但是你也可以使用自定义的 template loaders 从其他来源加载模板。

Django有两种方法加载模板

  1.     django.template.loader.get_template(template_name) : get_template 根据给定的模板名称返回一个已编译的模板(一个 Template 对象)。 如果模板不存在,就触发 TemplateDoesNotExist 的异常。
  2.     django.template.loader.select_template(template_name_list) : select_template 很像 get_template ,不过它是以模板名称的列表作为参数的。 它会返回列表中存在的第一个模板。 如果模板都不存在,将会触发TemplateDoesNotExist异常。

默认情况下这些函数使用 TEMPLATE_DIRS 的设置来载入模板。 但是,在内部这些函数可以指定一个模板加载器来完成这些繁重的任务。

一些加载器默认被禁用,但是你可以通过编辑 TEMPLATE_LOADERS 设置来激活它们。 TEMPLATE_LOADERS 应当是一个字符串的元组,其中每个字符串都表示一个模板加载器。 这些模板加载器随Django一起发布。

    django.template.loaders.filesystem.load_template_source : 这个加载器根据 TEMPLATE_DIRS 的设置从文件系统加载模板。它默认是可用的。

    django.template.loaders.app_directories.load_template_source : 这个加 载器从文件系统上的Django应用中加载模板。 对 INSTALLED_APPS 中的每个应用,这个加载器会查找templates 子目录。 如果这个目录存在,Django就在那里寻找模板。

    这意味着你可以把模板和你的应用一起保存,从而使得Django应用更容易和默认模板一起发布。 例如,如果 INSTALLED_APPS 包含 ('myproject.polls','myproject.music') ,那么 get_template('foo.html') 会按这个顺序查找模板:

/path/to/myproject/polls/templates/foo.html

    /path/to/myproject/music/templates/foo.html

    请注意加载器在首次被导入的时候会执行一个优化: 它会缓存一个列表,这个列表包含了 INSTALLED_APPS 中带有 templates 子目录的包。

    这个加载器默认启用。

    django.template.loaders.eggs.load_template_source : 这个加载器类似 app_directories ,只不过它从Python eggs而不是文件系统中加载模板。 这个加载器默认被禁用;如果你使用eggs来发布你的应用,那么你就需要启用它。 Python eggs可以将Python代码压缩到一个文件中。

Django按照 TEMPLATE_LOADERS 设置中的顺序使用模板加载器。 它逐个使用每个加载器直至找到一个匹配的模板。

Python 相关文章推荐
Python开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
kNN算法python实现和简单数字识别的方法
Nov 18 Python
详解在Python和IPython中使用Docker
Apr 28 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
Python解析并读取PDF文件内容的方法
May 08 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
pyQt5实时刷新界面的示例
Jun 25 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
python如何绘制疫情图
Sep 16 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 Python
python高温预警数据获取实例
Jul 23 Python
在Django框架中编写Context处理器的方法
Jul 20 #Python
详解Django框架中用context来解析模板的方法
Jul 20 #Python
Django中URLconf和include()的协同工作方法
Jul 20 #Python
在Python的Django框架中包装视图函数
Jul 20 #Python
Django中URL视图函数的一些高级概念介绍
Jul 20 #Python
Python的Django框架中从url中捕捉文本的方法
Jul 20 #Python
Django框架中处理URLconf中特定的URL的方法
Jul 20 #Python
You might like
destoon二次开发常用数据库操作
2014/06/21 PHP
php+mysqli使用面向对象方式更新数据库实例
2015/01/29 PHP
js计算页面刷新的次数
2009/07/20 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
原生js轮播特效
2017/05/18 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
Node 代理访问的实现
2019/09/19 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
python中的__slots__使用示例
2015/02/26 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
生物制药专业自我鉴定
2014/02/19 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
学生党员公开承诺书
2014/05/28 职场文书
环境保护标语
2014/06/20 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python