详解在Python的Django框架中创建模板库的方法


Posted in Python onJuly 20, 2015

不管是写自定义标签还是过滤器,第一件要做的事是创建模板库(Django能够导入的基本结构)。

创建一个模板库分两步走:

    第一,决定模板库应该放在哪个Django应用下。 如果你通过 manage.py startapp 创建了一个应用,你可以把它放在那里,或者你可以为模板库单独创建一个应用。 我们更推荐使用后者,因为你的filter可能在后来的工程中有用。

    无论你采用何种方式,请确保把你的应用添加到 INSTALLED_APPS 中。 我们稍后会解释这一点。

    第二,在适当的Django应用包里创建一个 templatetags 目录。 这个目录应当和 models.py 、 views.py 等处于同一层次。 例如:

books/
  __init__.py
  models.py
  templatetags/
  views.py

    在 templatetags 中创建两个空文件: 一个 __init__.py (告诉Python这是 一个包含了Python代码的包)和一个用来存放你自定义的标签/过滤器定义的文件。 第二个文件的名字稍后将用来加载标签。 例如,如果你的自定义标签/过滤器在一个叫作 poll_extras.py 的文件中,你需要在模板中写入如下内容:

{% load poll_extras %}

    {% load %} 标签检查 INSTALLED_APPS 中的设置,仅允许加载已安装的Django应用程序中的模板库。 这是一个安全特性;它可以让你在一台电脑上部署很多的模板库的代码,而又不用把它们暴露给每一个Django安装。

如果你写了一个不和任何特定模型/视图关联的模板库,那么得到一个仅包含 templatetags 包的Django应用程序包是完全正常的。 对于在 templatetags 包中放置多少个模块没有做任何的限制。 需要了解的是:{%load%}语句是通过指定的Python模块名而不是应用名来加载标签/过滤器的。

一旦创建了Python模块,你只需根据是要编写过滤器还是标签来相应的编写一些Python代码。

作为合法的标签库,模块需要包含一个名为register的模块级变量。这个变量是template.Library的实例,是所有注册标签和过滤器的数据结构。 所以,请在你的模块的顶部插入如下语句:

from django import template

register = template.Library()

注意

请阅读Django默认的过滤器和标签的源码,那里有大量的例子。 他们分别为: django/template/defaultfilters.py 和 django/template/defaulttags.py 。django.contrib中的某些应用程序也包含模板库。

创建 register 变量后,你就可以使用它来创建模板的过滤器和标签了。

Python 相关文章推荐
python之wxPython菜单使用详解
Sep 28 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
Python使用爬虫猜密码
Feb 19 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
Python处理session的方法整理
Aug 29 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
Python文件时间操作步骤代码详解
Apr 13 Python
Django模板获取field的verbose_name实例
May 19 Python
用python读取xlsx文件
Dec 17 Python
python实现定时发送邮件
Dec 23 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 #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
You might like
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
php cookie的操作实现代码(登录)
2010/12/29 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
php实现算术验证码功能
2018/12/05 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
python生成n个元素的全组合方法
2018/11/13 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
python解释器spython使用及原理解析
2019/08/24 Python
如何基于Python实现自动扫雷
2020/01/06 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
乡下人家教学反思
2014/02/01 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
公司踏青活动方案
2014/08/16 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
法定代表人资格证明书
2014/09/11 职场文书
公务员考察材料
2014/12/23 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android