详解在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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
python获取指定目录下所有文件名列表的方法
May 20 Python
对python GUI实现完美进度条的示例详解
Dec 13 Python
python游戏地图最短路径求解
Jan 16 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
python+django+rest框架配置创建方法
Aug 31 Python
Python实现AI换脸功能
Apr 10 Python
python+django+selenium搭建简易自动化测试
Aug 19 Python
详解Python模块化编程与装饰器
Jan 16 Python
python Tkinter的简单入门教程
Apr 11 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
php+mysql事务rollback&commit示例
2010/02/08 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
ThinkPHP之getField详解
2014/06/20 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
js单例模式的两种方案
2013/10/22 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
js实现交通灯效果
2017/01/13 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
使用clipboard.js实现复制功能的示例代码
2017/10/16 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
Python json模块使用实例
2015/04/11 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
Python try except finally资源回收的实现
2021/01/25 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
大学生职业生涯规划书模板
2014/01/03 职场文书
优秀医生事迹材料
2014/02/12 职场文书
小学家长评语大全
2014/04/16 职场文书
体育专业求职信
2014/07/16 职场文书
欢迎家长标语
2014/10/08 职场文书
2014年计生工作总结
2014/11/21 职场文书
协议书格式模板
2016/03/24 职场文书