详解在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连接mysql并提交mysql事务示例
Mar 05 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
Apr 11 Python
python读取TXT每行,并存到LIST中的方法
Oct 26 Python
Python高级特性 切片 迭代解析
Aug 23 Python
Python中的引用和拷贝实例解析
Nov 14 Python
Python 项目转化为so文件实例
Dec 23 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
python如何基于redis实现ip代理池
Jan 17 Python
如何在python中处理配置文件代码实例
Sep 27 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 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
在JavaScript中调用php程序
2009/03/09 PHP
php 表单验证实现代码
2009/03/10 PHP
PHP 定界符 使用技巧
2009/06/14 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
认识延迟时间为0的setTimeout
2008/05/16 Javascript
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
js 浮动层菜单收藏
2009/01/16 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python3.x中自定义比较函数
2015/04/24 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
python和shell获取文本内容的方法
2018/06/05 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
Python ATM功能实现代码实例
2020/03/19 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
保荐人的岗位职责
2013/11/19 职场文书
运动会广播稿30字
2014/01/21 职场文书
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
商场主管竞聘书
2014/03/31 职场文书
慈善晚会策划方案
2014/05/14 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
六年级情感作文之500字
2019/10/23 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android