您的位置:首页 > 编程语言 > Go语言

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

2010-06-01 13:43 513 查看

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文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息