【django 学习笔记】08-模板高级进阶

来源:互联网 发布:js 长度单位转换 编辑:程序博客网 时间:2024/06/05 09:51

django的模板系统默认开启html转义,

关闭方法

a.safe过滤器:
{{ data|safe }}
b.对于模板快
#停止自动转义
{% autoescape off %}

#开始自动转义
{% autoescape on %}

{% endautoescape %}
{% endautoescape %}

两种加载模板的方法

a.django.template.loader.get_template(template_name) : get_template 根据给定的模板名称返回一个已编译的模板(一个 Template 对象)。 如果模板不存在,就触发 TemplateDoesNotExist 的异常。

b.django.template.loader.select_template(template_name_list) : select_template 很像get_template ,不过它是以模板名称的列表作为参数的。 它会返回列表中存在的第一个模板。如果模板都不存在,将会触发TemplateDoesNotExist异常。

创建一个模板库

步骤:
第一,决定模板库应该放在哪个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安装。

自定义过滤器

自定义过滤器就是有一个或两个参数的Python函数:
a.(输入)变量的值
b.参数的值, 可以是默认值或者完全留空
如:{{ var|foo:”bar” }} 中过滤器 foo 会被传入变量 var 和默认参数 bar 。

当你定义完过滤器后,你需要用 Library 实例来注册它,这样就能通过Django的模板语言来使用了:
register.filter(‘cut’, cut)
register.filter(‘lower’, lower)
Library.filter() 方法需要两个参数:
a.过滤器的名称(一个字串)
b.过滤器函数本身

下面是一个完整的模板库的例子,它包含一个 cut 过滤器:
from django import template
register = template.Library()
@register.filter(name=’cut’)
def cut(value, arg):
return value.replace(arg, ”)

自定义模板标签

由于相对复杂,请参考文档相应章节

简单标签的快捷方式

simple_tag是django.template.Library的一个方法

def current_time(format_string):
try:
return datetime.datetime.now().strftime(str(format_string))
except UnicodeEncodeError:
return ”
register.simple_tag(current_time)

需要注意下面一些事情:
a.传递给我们的函数的只有(单个)参数。
b.在我们的函数被调用的时候,检查必需参数个数的工作已经完成了,所以我们不需要再做这个工作。
c.参数两边的引号(如果有的话)已经被截掉了,所以我们会接收到一个普通Unicode字符串。

包含标签

另外一类常用的模板标签是通过渲染 其他 模板显示数据的。

编写自定义波板加载器

模板加载器,也就是 TEMPLATE_LOADERS 中的每一项,都要能被下面这个接口调用:
load_template_source(template_name, template_dirs=None)
可以从ZIP文件中加载模板。 它使用了自定义的设置 TEMPLATE_ZIP_FILES 来取代了 TEMPLATE_DIRS 用作查找路径,并且它假设在此路径上的每一个文件都是包含模板的ZIP文件

原创粉丝点击