@

官方文档



两种特殊符号:{{ }} 与 {% %}

变量相关使用{{ }},逻辑相关使用{% %}.

一、变量

在Django模版语言中按此语法使用:{{ 变量名 }}

当模版引擎遇到一个变量时,它将计算这个变量,然后用结果替换它本身.

变量的命名包括任何字母数字以及下划线(_)的组合.

变量名称中不能有空格或标点符号.

点(.) 在模版语言中有特殊的含义,当模版系统遇到点时,它将以以下顺序查询:

  1. 字段查询(Dictionary lookup)
  2. 属性或方法查询(Attribute or method lookup)
  3. 数字索引查询(Numeric index lookup)

注意事项:

  1. 如果计算结果的值是可调用的,它将被无参数调用,调用的结果将成为模版的值.
  2. 如果使用的变量不存在,模版系统将插入 string_if_invalid 选项的值,此选项的值默认为空字符串.

简单示例:

from django.shortcuts import HttpResponse, render, redirect

def template_test(request):
lst = ['a', 'b', 'c', 'd'] dct = {
'name': 'zyk',
'sex': 'boy',
'hobby': ['Python', 'Django', 'MySQL']
} class Person(object):
def __init__(self, name, sex):
self.name = name
self.sex = sex def blogging(self):
return '%s is blogging.' % self.name zyk = Person('zyk', 'boy')
xhh = Person('xhh', 'girl')
xmm = Person('xmm', 'girl')
person_list = [zyk, xhh, xmm] return render(
request,
'template_test.html',
{
'lst': lst,
'dct': dct,
'person_list': person_list
}
)

模版中可以这样写:

取lst中索引为0的值:

{{ lst.0 }} # a

取dct中name的值:

{{ dct.name }} # zyk

取dct中的hobby列表中的索引为1的值:

{{ dct.hobby.1 }} # Django

取person_list中索引为2的对象的name:

{{ person_list.2.name }} # xmm

调用person_list中索引为0的对象的blogging方法:

{{ person_list.0.blogging }} # zyk is blogging.



二、过滤器 Filters

在Django模版语言中,通过使用 过滤器 来改变变量的显示.

语法:{{ 变量|过滤方法:参数 }}

其中:管道符(|)用来应用过滤器,冒号(:)用来指定过滤器的参数.

注意事项:

  1. 过滤器支持"链式"操作,即一个过滤器的输出可以作为另一个过滤器的输入.
  2. 过滤器可以接受参数,例如:{{ value|truncatewords:30 }},表示显示values的前30个词.
  3. 过滤器参数包含空格的话,必须用引号包裹起来,比如使用逗号和空格拼接列表中的元素:{{ list|join:', ' }}.
  4. 管道符(|)两边没有空格.

1. default

指定变量的默认值.

语法:value|default:"默认值"

如果一个变量的值为false或者为空,便会使用给定的默认值。否则,使用变量的值.

注:

在settings.py文件内的TEMPLATES内的OPTIONS内可以增加一个选项来指定默认值(优先级大于default):

'string_if_invalid': "默认值",


2. length

返回值的长度,作用于字符串和列表.

语法:value|length


3. filesizeformat

将值格式化为一个"人类可读的"文件尺寸.

语法:value|filesizeformat


4. slice

切片

语法value|slice:"2:-1"


5. add

在值的末尾添加指定值,如果全部为数字,则相加.

语法:value|add:"添加的值"


6. first、last

取第一个元素、取最后一个元素.

可用于循环的时候判断是否为第一个或最后一个值.


7. join

使用字符串拼接列表.

语法:value|join:"字符串"


8. truncatechars

如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾(注意:"..."占3个字符).

语法:value|truncatechars:9


9. truncatewords

在一定数量的字后截断字符串.

语法:value|truncatewords

10. date

日期格式化

语法:value|date:'Y-m-d H:i:s'

可格式化输出的字符


11. safe

Django的模版中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,是为了安全。

但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。

为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器(value|safe)的方式告诉Django这段代码是安全的不必转义。

例如:value = "<a href='#'></a>"


12. cut

移除所有与指定字符相同的字符串.

语法:value|cut:'空格'


13. lower、upper、title、ljust、rjust、center

依次为:全部小写、全部大写、标题化、左对齐、右对齐、居中.


14. 自定义filter

自定义过滤器只是带有一个或两个参数的Python函数:

  • 变量(输入)的值:不一定是一个字符串
  • 参数的值: 可以有一个默认值,或完全省略

例如,在过滤器 {{ var|func:'var' }} 中,过滤器func将传递变量var和参数'bar'.

自定义filter代码文件存放位置:

在app下新建一个名为templatetags的package,再在package下面创建自定义filter的文件.

自定义filter文件写法如下:

from django import template
register = template.Library() @register.filter(name='addSB')
def add_sb(value):
return '%s is SB' % value

调用自定义filter:

{# 先导入自定义的filter文件 #}
{% load 文件名 %} {# 使用自定义的filter #}
{{value|addSB }}

15. Tags

for
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>

for循环可用的一些参数:

Variable Description
forloop.cunter 当前循环的索引值(从1开始)
forloop.cunter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环
for ... empty
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% empty %}
<li>空空如也</li>
{% endfor %}
</ul>
if ... else
{% if user_list|length > 5 %}
七座豪华SUV
{% else %}
黄包车
{% endif %}
if ... elif ... else
{% if user_list %}
用户人数:{{ user_list|length }}
{% elif black_list %}
黑名单数:{{ black_list|length }}
{% else %}
没有用户
{% endif %}

if语句支持:and、or、==、>、<、!=、<=、>=、in、not in、is、is not判断.

但是!Django模版语言不支持连续判断,即不支持以下写法:

{% if a > b > c %}
...
{% endif %}
with

定义一个中间变量

{% with value as v %}
{{ v }}
{% endwith %}

16. csrf_token

用于跨站点请求伪造保护.

必须写在form表单内部:
{% csrf_token %}



三、母板

示例(母板文件为:base.html,内容如下):

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
{% block page-css %}
{% endblock %}
</head>
<body> <h1>这是母板的标题</h1>
{% block page-main %}
{% endblock %} <h1>母板底部内容</h1>
{% block page-js %}
{% endblock %}
</body>
</html>

注意:我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。


模版继承

示例(继承上例的母版):

{% extends 'base.html' %}

块(block)

通过在母版中使用 {% block xxx %} 来定义"块".

在子页面中通过定义母板中的block名来对应替换母版中相应的内容.

例如:

{% block page-css %}
...
{% endblock %} {# 这是母板的标题 #}
{% block page-main %}
...
{% endblock %} {# 母板底部内容 #}
{% block page-js %}
...
{% endblock %}


四、组件

可以将常用的页面内容,如导航条、页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。

{% include "文件全名" %}

示例(在base.html文件中导入nav.html文件内的代码):



五、静态文件相关

从settings文件内获取 STATIC_URL='/static/' 和相对路径进行拼接.

{% load static %}
<img src="{% static 'images/hi.jpg' %}" alt="Hi!"/>

引用JS文件时使用:

{% <script src="{% static 'mytest.js' %}"></script> %}

如果某个文件多处被同时用到,可以存为一个变量:

{% load static %}
{% static 'images/hi.jpg' as myphoto %}
<img src="{{ myphoto }}"><img>

示例(导入bootstrap文件):


使用get_static_prefix

从settings文件内获取 STATIC_URL='/static/' 和相对路径进行拼接.

{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" /> # 或者 {% load static %}
{% get_static_prefix as STATIC_PREFIX %}
<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />

示例(导入bootstrap文件):


自定义simpletag_tag


自定义inclusion_tag

1.在app下创建一个名为 tmplatetags 的python package包.

2.在包下新建py文件(如:mytags.py)

3.编辑文件,具体步骤如下:



【Django】模板系统的更多相关文章

  1. django模板系统基础

    模板系统基础Django模板是一个string文本,它用来分离一个文档的展现和数据 模板定义了placeholder和表示多种逻辑的tags来规定文档如何展现 通常模板用来输出HTML,但是Djang ...

  2. python MVC、MTV 框架介绍 Django 模板系统常用语法

    Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命 ...

  3. Django 模板系统

    Django模板系统 常用语法 {{}} 变量相关 {%%} 逻辑相关 变量 格式 {{ 变量名 }} 命名规则 包括任何字母数字以及下划线 ("_")的组合 变量名称中不能有空格 ...

  4. Python学习(二十八)—— Django模板系统

    转载自http://www.cnblogs.com/liwenzhou/p/7931828.html Django模板系统 官方文档 一.常用语法 只需要记两种特殊符号: {{  }}和 {% %} ...

  5. Django模板系统(非常详细)(后台数据如何展示在前台)

    前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的这会导致几个问题:1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频 ...

  6. (转)Django学习之 第四章:Django模板系统

    前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的 这会导致几个问题: 1.显然,任何页面的改动会牵扯到Python代码的改动 网站的设计改动会比Python代码改 ...

  7. Django模板系统

    创建模板对象Template类在django.template模板中 // 用django-admin.py startproject 命令创建一个项目目录django-admin.py startp ...

  8. django模板系统(上)

    filters 过滤 default 替代作用 filesizeformat 格式化为人类可读 add 给变量加参数 lower 小写 upper 大写 title 标题 ljust 左对齐 rjus ...

  9. python终极篇 ---django 模板系统

                                                模板系统                                                . MV ...

  10. Django模板系统:Template

    一.模板常用语法 1.1 变量 符号:{{ }} 表示变量,在模板渲染的时候替换成值 使用方式:{{ 变量名 }}:变量名由字母数字和下划线组成 点(.)在模板语言中有特殊的含义,用来获取对象的相应属 ...

随机推荐

  1. Thinking in States

    Thinking in States Niclas Nilsson PEOPLE IN THE REAL WORLD HAVE A WEIRD RELATIONSHIP WITH STATE. Thi ...

  2. nyoj-673-悟空的难题(数组标记)

    悟空的难题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 自从悟空当上了齐天大圣.花果山上的猴子猴孙们便也能够尝到天上的各种仙果神酒,所以猴子猴孙们的体质也得到了非 ...

  3. less04 运算符、命名空间

    less //.wp{ // margin: 0 auto; // background: forestgreen; // width: 450px + 450; //有一个有单位就可以 // hei ...

  4. 双系统给ubuntu增加分区

    http://www.th7.cn/system/lin/201506/106338.shtml http://www.linuxidc.com/Linux/2012-06/61983.htm 因为本 ...

  5. hdoj--2036--改革春风吹满地(数学几何)

    改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  6. Random numbers

    Most computer programs do the same thing every time they execute, given the same inputs, so they are ...

  7. centos7 初始化安装

    CENTOS7 初装 一.分区 挂载路径 格式 容量 / xfs 102400 swap 等同内存大小 /home xfs 剩余 二.时区 Asia/Shanghai 三.安装包选择 选择最小化安装 ...

  8. js中return 、return false 、return true、break、continue区别

    在开发中不熟悉这三者区别的同学,一般都知道return可以中止,但会根据字面意思觉得return true 中止当前函数执行,但其后的函数还会继续执行.return false 中止当前函数执行,其后 ...

  9. Systemd曝3漏洞,大部分Linux将受到攻击

    Linux 系统与服务管理工具 Systemd 被曝存在 3 大漏洞,影响几乎所有 Linux 发行版. Systemd 是 Linux 系统的基本构建块,它提供了对系统和服务的管理功能,以 PID ...

  10. Linux 常用命令:系统状态篇

    前言 Linux常用命令中,有些命令可以用于查看系统的状态,通过了解系统当前的状态,能够帮助我们更好地维护系统或定位问题.本文就简单介绍一下这些命令. 1. 查看系统运行时间--uptime 有时候我 ...