详解在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实现目录树生成示例
Mar 28 Python
Python collections模块实例讲解
Apr 07 Python
记录Django开发心得
Jul 16 Python
python实现多线程暴力破解登陆路由器功能代码分享
Jan 04 Python
Python的Django框架使用入门指引
Apr 15 Python
python使用xlrd和xlwt读写Excel文件的实例代码
Sep 05 Python
pandas实现to_sql将DataFrame保存到数据库中
Jul 03 Python
python实现飞机大战小游戏
Nov 08 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
基于python爬取有道翻译过程图解
Mar 31 Python
Django缓存Cache使用详解
Nov 30 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 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(二)
2006/10/09 PHP
php购物车实现代码
2011/10/10 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
php中call_user_func函数使用注意事项
2014/11/21 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
javascript options属性集合操作代码
2009/12/28 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
Guess欧洲官网:美国服饰品牌
2019/08/06 全球购物
几道PHP的面试题
2012/05/19 面试题
年度考核自我鉴定
2014/02/02 职场文书
节约用水演讲稿
2014/05/21 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
普通员工辞职信范文
2015/05/12 职场文书
详解Python函数print用法
2021/06/18 Python
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL