简单介绍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 代码性能优化技巧分享
Aug 07 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
简单了解django缓存方式及配置
Jul 19 Python
python如何统计代码运行的时长
Jul 24 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
Django 响应数据response的返回源码详解
Aug 06 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
Python pysnmp使用方法及代码实例
Aug 24 Python
Python实现定时监测网站运行状态的示例代码
Sep 30 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
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
js 获取Listbox选择的值的代码
2010/04/15 Javascript
JS表的模拟方法
2015/02/05 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
Python实现的简单计算器功能详解
2018/08/25 Python
python调用自定义函数的实例操作
2019/06/26 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
python中提高pip install速度
2020/02/14 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
Python实现手势识别
2020/10/21 Python
应届生骨科医生求职信
2013/10/31 职场文书
优秀通讯员事迹材料
2014/01/28 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
融资合作协议书范本
2014/10/17 职场文书
股权转让协议书
2014/12/07 职场文书
聚会通知怎么写
2015/04/23 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
Python面向对象之内置函数相关知识总结
2021/06/24 Python