django模板中最常用的两种特殊符号是 {{ }} 用来表示变量和 {% %} 用来表示逻辑相关的操作

变量

{{ 变量名 }} ,由字母数字下划线组成而.在模板语言中有特殊含义,用来获取对象相应的属性值

【举例】

在view中进行定义

 def jjzz(request):
l = [1,2,3]
d = {"name":"jjzz"}

class Hero(object):
def __init__(self,name,age):
self.name = name
self.age = age

def attack(self):
return f"{self.name} is attacking ..."

gailun = Hero(name='gailun',age=23)
zhaoxin = Hero(name='zhaoxin',age=24)
nvjing = Hero(name="kaiselin",age=22)

hero_list = [gailun,zhaoxin,nvjing]

return render(request,"jjzz.html",{"l":l,"d":d,"hero_list":hero_list})中HTML支持的写法

HTML中的基础用法

 <body>

{# 获取列表l中的元素 #}
<p>第一个元素:{{ l.0 }}</p>
<p>第三个元素:{{ l.2 }}</p>

{# 获取字典d中的key #}
<p>获取d中的name:{{ d.name }}</p>

{# 获取Hero对象的name属性 #}
<p>{{ hero_list.0.name }}</p>

{# 使用 . 只能调用不带参数的方法#}
<p>{{ hero_list.1.attack }}</p>

</body>

【注意】

当模板系统遇到.时,会按照如下的顺序去查询:

  1. 在字典中查询

  2. 属性或者方法

  3. 数字索引

内置Filters

过滤器,用来修饰变量的显示结果

语法 {{ 变量名|过滤器名:参数 }}  注意两边不能有空格,过滤器与给过滤器的参数是一个整体,而且过滤器只能有一个参数

default

定义变量的默认值,在没有传递变量或者参数没有定义(不存在或者为空)时,使用默认值

{{ value|default_name:"nothing"}}  # 如果value值没有没传的话就显示nothing

源码解释:
@register.filter(is_safe=False)
def default(value, arg):
"""If value is unavailable, use given default."""
return value or arg

【注意】在settings中的TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:'找不到',可以替代default的的作用,优先级高于直接设置default。

default_if_none

使用形式: {{ value | default_if_none:"nothing" }} ,

意义:如果value是None,那么输出将是nothing.

源码解释

 @register.filter(is_safe=False)
def default_if_none(value, arg):
"""If value is None, use given default."""
if value is None:
return arg
return value

【与default的区别】

None:不存在即为空,'',None

unavailable:None,False,[],{},''等都可以算是不可用

符号 defaul:"noting" default_if_none:"noting"
{} noting {}
"" noting noting
None noting noting
[] noting []
False noting False
filesizeformat

将值转换成便于用户可读的方式 。例如:1.1KB,1.1MB,1.1GB

 {{ value|filesizeformat }}   # 比如变量value的值为100000,显示为97.7 KB
add

给变量加参数

 {{ value|add:"2" }}  # value是数字4,则输出结果为6。
{{ l1|add:l2 }} # 如果l1是 [1,2,3] ,l2是 [4,5,6] ,那输出结果是 [1,2,3,4,5,6]
lower
 {{ value|lower }}  # 变小写,还能给布尔值变大小写呢
upper
 {{ value|upper}}  # 变大写
title
 {{ value|title }}  # 单词首字母大写
ljust
 "{{ value|ljust:"10" }}"  # 左对齐
rjust
 "{{ value|rjust:"10" }}"  # 右对齐
center
 "{{ value|center:"15" }}"  # 居中
length
 {{ value|length }}  # 返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4
slice
 {{value|slice:"2:-1"}}  # 切片
first
 {{ value|first }}  # 取第一个元素
last
 {{ value|last }}  # 去最后一个元素
join
 {{ value|join:" // " }}  # 使用字符串拼接列表,功能等同于python中的str.join(list)
truncatechars

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

参数:截断的字符数,

 {{ value|truncatechars:9}}  # 截断9个字符
truncatewords

将字符串转换为省略表达方式,以空格计数单词

 {{ value|truncatewords:9}}  # 阶段9个单词
date
 {{ value|date:"Y-m-d H:i:s"}}  # 日期格式化

可格式化输出的字符

也可以在settings中进行日期格式的定义

 USE_L10N = False

DATETIME_FORMAT = 'Y-m-d H:i:s'
DATE_FORMAT = 'Y-m-d'
TIME_FORMAT = 'H:i:s'
字典拆包
 {{  dic.key  }}

{{ dic.keys }}

{{ dic.values }}

{{ dic.items}}

【注意】Django的模板语言中属性的优先级大于方法
例如dic = {"name":"jjzz", "items": "100"}

在模板中执行{{ dic.items }}

显示100 ​
safe

通常情况下,django模板会对HTML标签和JS语法进行自动转义,就是将包含的html标签输出,而不被解释执行,原因是当显示用户提交字符串时,可能包含一些攻击性的代码,如js脚本。例如<会转换为&lt,但是有些时候我们不希望这些元素被HTML转义,那么这是就需要safe过滤器来告诉django这段代码是安全的,不需要转义。

 {{ value|safe}}

【举例】

views中设置

 link = '<a href="https://cn.bing.com">这是bing搜索</a>'
return(request,"jjzz.html",{"link":link})

HTML模板中设置

 <p>{{ link }}</p>
<p>{{ link|safe }}</p>

显示

还可以在views中在向模板传递数据前使用mark_safe来进行防转义设置

 from django.utils.safestring import mark_safe

a_link= mark_safe('<a href="http://www.baidu.com">跳转</a>')

自定义Filter

自定义的过滤器知识带一个或者两个参数的python函数

定义

  1. 在app下创建一个名为templatetags的python包,确保该app已经在settings.py中INSTALLED_APPS注册了。

  2. 在包内创建py文件 — > 自定义 jjzz.py

  3. 在py文件中写入:

     from django import template
    register = template.Library() # register不能变
  4. 定义函数 + 加装饰

     from django.utils.safestring import mark_safe

    @register.filter
    def new_safe(value, arg=None): # arg 最多有一个
    return mark_safe(value)

在模板中使用:

 {% load jjzz %}
{{ '<a href="https://cn.bing.com">这是bing搜索</a>'|new_safe }}

Template模板语法

 

Django模板系统-内置和自定义Filters的更多相关文章

  1. Django 模板系统

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

  2. django模板系统基础

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

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

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

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

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

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

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

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

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

  7. pytest封神之路第四步 内置和自定义marker

    可以通过命令行查看所有marker,包括内置和自定义的 pytest --markers 内置marker 内置marker本文先讲usefixtures .filterwarnings .skip ...

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

                                                模板系统                                                . MV ...

  9. Django模板系统:Template

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

随机推荐

  1. Python模拟浏览器多窗口切换

    # 模拟浏览器多窗口切换 # 代码中引入selenium版本为:3.4.3 # 通过Chrom浏览器访问发起请求 # Chrom版本:59 ,chromdriver:2.3 # 需要对应版本的Chro ...

  2. Postman之 SSL证书配置随手记

    参考文档: https://learning.getpostman.com/docs/postman/sending_api_requests/certificates/ 随着 https 的推动,更 ...

  3. NServiceBus:使用自定义log4net

    安装扩展包:NServiceBus.Log4Net Endpoint.cs增加注入 log4net.Config.BasicConfigurator.Configure(); NServiceBus. ...

  4. hdu 6070 Dirt Ratio

    题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6070 (2017 Multi-University Training Contest - Team ...

  5. 网络编程-UDP echo server

    1. UDP简介 UDP 和TCP 的区别包括 1. 面向字节流和面向报文 2. TCP必须要建立连接后才能进行数据交换,但是UDP则并没有连接的建立和释放过程.面向字节流说明,tcp报文段(segm ...

  6. Python之signal模块的使用

    常用的信号值如下: 信号值 事件 处理方式 SIGHUP 终止进程 终端线路挂断 SIGINT 终止进程 中断进程 SIGQUIT "建立CORE文件终止进程,并且生成core文件" ...

  7. Java进阶知识03 Hibernate的基础配置详解

    1.Hibernate的原理/流程步骤 1.通过Configuration().configure(); 读取并解析hibernate.cfg.xml配置文件,并创建一个configuration对象 ...

  8. Hibernate 5 的模块/包(modules/artifacts)

    Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化). 模块名称 说明 hibernate-core 这个是 Hibernat ...

  9. flask框架(二):简单的登录demo

    一:main.py # -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/3 22:58 from flask import ...

  10. 两篇将rf和boosting方法用在搜索排序上的paper

    在网上看到关于排序学习的早期文章,这两篇文章大致都使用了Random Forest和Boosting方法. 一.paper 1.Web-Search Ranking with Initialized ...