django的html语言,django Django模板语言详解 - 刘江的django教程

Django模板语言详解

阅读: 50775

评论:13

本节将介绍Django模版系统的语法。Django模版语言致力于在性能和简单性上取得平衡。

如果你有过其它编程背景,或者使用过一些在HTML中直接混入程序代码的语言,那么你需要记住,Django的模版系统并不是简单的将Python嵌入到HTML中。

一、模板

模版是纯文本文件,可以生成任何基于文本的文件格式,比如HTML,XML,CSV等。

下面是一个小模版,它展示了一些基本的元素。

{% extends "base_generic.html" %}

{% block title %}{ { section.title }}{% endblock %}

{% block content %}

{ { section.title }}

{% for story in story_list %}

{ { story.headline|upper }}

{ { story.tease|truncatewords:"100" }}

{% endfor %}

{% endblock %}

二、变量

变量看起来就像是这样: { { variable }}。

当模版引擎遇到一个变量,它将从上下文context中获取这个变量的值,然后用值替换掉它本身。

变量的命名包括任何字母数字以及下划线("_")的组合,最重要的是,变量名称中不能有空格或标点符号。

当模版系统渲染变量的时候遇到点("."),它将以这样的顺序查询这个圆点具体代表的功能:

字典查询(Dictionary lookup)

属性或方法查询(Attribute or method lookup)

数字索引查询(Numeric index lookup)

如果你使用的变量不存在,模版系统将插入string_if_invalid选项的值,默认设置为''(空字符串)。

注意,像{ { foo.bar }}这种模版表达式中的“bar”,如果在模版上下文中存在,将解释为一个字面意义的字符串而不是使用变量bar的值 。

三、过滤器

过滤器看起来是这样的:{ { name | lower }}。使用管道符号(|)来应用过滤器。该过滤器将文本转换成小写。

过滤器可以“链接”。一个过滤器的输出应用于下一个过滤器。例如:{ { text|escape|linebreaks }}就是一个常用的过滤器链,它首先转移文本内容,然后把文本行转成

标签。

一些过滤器带有参数。 过滤器的参数看起来像是这样: { { bio|truncatewords:30 }}。 这将显示bio变量的前30个词。

过滤器参数包含空格的话,必须用引号包起来。例如,使用逗号和空格去连接一个列表中的元素,你需要使用{ { list|join:", " }}。

Django提供了大约六十个内置的模版过滤器,很多时候你想要的功能,它都已经提供了,经常查看这些过滤器,发现新大陆吧。下面是一些常用的模版过滤器:

1. default

为false或者空变量提供默认值,像这样:

{ { value|default:"nothing" }}

2. length

返回值的长度。它对字符串和列表都起作用。

{ { value|length }}

如果value是['a', 'b', 'c', 'd'],那么输出4。

3. filesizeformat

格式化为“人类可读”文件大小单位(即'13 KB',4.1 MB','102 bytes'等)。

{ { value|filesizeformat }}

如果value是123456789,输出将会是117.7MB。

我们可以创建自定义的模板过滤器和标签,这是最终极的武器。

四、标签

标签看起来像是这样的: {% tag %}。

标签比变量复杂得多,有些用于在输出中创建文本,有些用于控制循环或判断逻辑,有些用于加载外部信息到模板中供以后的变量使用。

一些标签需要开始和结束标签(即 {% 标签 %} ... 标签 内容 ... {% ENDTAG %})。

Django自带了大约24个内置的模版标签。下面是一些常用的标签:

1. for循环标签

循环对象中每个元素。需要结束标签{% endfor %} 。例如,显示athlete_list中提供的运动员列表:

{% for athlete in athlete_list %}

{ { athlete.name }}

{% endfor %}

2. if,elif和else标签

计算一个表达式,并且当表达式的值是“True”时,显示块中的内容。需要{% endif %}结束标签。整体逻辑非常类似Python的if、elif和else,如下所示。:

{% if athlete_list %}

Number of athletes: { { athlete_list|length }}

{% elif athlete_in_locker_room_list %}

Athletes should be out of the locker room soon!

{% else %}

No athletes.

{% endif %}

在上面的例子中,如果athlete_list不是空的,运动员的数量将显示为{ { athlete_list|length }}。否则,如果athlete_in_locker_room_list不为空,将显示“Athletes should be

你可能感兴趣的:(django的html语言)