详解在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编写生成验证码的脚本的教程
May 04 Python
使用Python压缩和解压缩zip文件的教程
May 06 Python
在Python中操作日期和时间之gmtime()方法的使用
May 22 Python
python web框架学习笔记
May 03 Python
Python Web版语音合成实例详解
Jul 16 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
Python 获取numpy.array索引值的实例
Dec 06 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
浅析python标准库中的glob
Mar 13 Python
Django分组聚合查询实例分享
Apr 29 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 Python
Django前后端分离csrf token获取方式
Dec 25 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
example2.php
2006/10/09 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
取选中的radio的值
2010/01/11 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
python3实现名片管理系统
2020/11/29 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
大学系主任推荐信范文
2013/12/24 职场文书
大课间活动实施方案
2014/03/06 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
假释思想汇报范文
2014/10/11 职场文书
护理医院见习报告
2014/11/03 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
首次购房证明
2015/06/19 职场文书
护士旷工检讨书
2015/08/15 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
Golang获取List列表元素的四种方式
2022/04/20 Golang
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers