详解在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实现每次处理一个字符的三种方法
Oct 09 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
Python 高级专用类方法的实例详解
Sep 11 Python
python删除字符串中指定字符的方法
Aug 13 Python
Python 变量类型详解
Oct 10 Python
python使用matplotlib绘制热图
Nov 07 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
PHP7多线程搭建教程
2017/04/21 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
Python selenium如何设置等待时间
2016/09/15 Python
django输出html内容的实例
2018/05/27 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
母亲节演讲稿范文
2014/01/02 职场文书
宣传标语大全
2014/07/01 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android