一、变量

'''
1.视图函数可以通过两种方式将变量传递给模板页面
-- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量keyn': '变量值n'})
-- render(request, 'test_page.html', locals())
# locals() 就是将视图函数中的所有变量都传递给模板页面 2.模板页面中对变量的使用
def dtl(request):
num = 3.14
ss = '大碗宽面'
# return render(request, 'django_dtl.html', {'number': num, 'ss': ss})
#上述方法必须用key取值 result = True
list = [1, 2, 3, 4, 5]
dic = {'name': 'henry', 'age': 24} # 函数不能带有参数,模板中{{ fn }} 本质就是调用函数拿到函数值(函数的返回值)
def fn():
return "fn function" class Person:
name = "henry"
def __str__(self):
return "这是Person类"
p = Person()
# locals()存放当前作用域中所有的名字
return render(request, 'django_dtl.html', locals())
'''
'''
<li>{{ num }}</li> #3.14
<li>{{ list }} -- {{ list.0 }}</li> #[1, 2, 3, 4, 5] -- 1
<li>{{ dic }} -- {{ dic.age }}</li> #{'name': 'henry', 'age': 24} -- 24
<li>{{ fn }}</li> #fn function
<li>{{ Person }} -- {{ Person.name }}</li>
# Person => Person() => __str__的返回值 Person.name = "henry"
<li>{{ 123 }}</li> # 也可以直接写数字、字符串、布尔值
'''

二、过滤器(filter)

'''
1.语法:
-- {{ 变量|过滤器1[[:参数]|...|过滤器n[:参数]] }}
-- 注:过滤器可以串联操作,可以拥有0个或1个参数 2.常见内置filter
-- 增加 add:num #{{ num |add:1|add:2 }} -- 字符串长度 length #{{ ss|length }} -- 默认值 default:'默认值'
# {{ number|default:"number不存在或值为False" }} 变量不存在或值为False,会返回number的默认值,否则返回number本身的值 -- 全大写 upper #{{ 'Abc'|upper }} 结果:ABC -- 全小写 lower #{{ 'Abc'|lower }} 结果:abc -- 切片 slice:'1:-1' #{{ '123456789'|slice:'1:-1' }} 结果:2345678 -- 将数字转换为文件大小 filesizeformat
#file_size=1024
#<li>{{ file_size|filesizeformat}}</li> 结果:1.0kb #file_size = 1024*1024
#<li>{{ file_size|filesizeformat}}</li> 结果:1.0 MB -- 字符串隐藏 truncatechars:13 # 只显示10个字符,后置字符都用...来替代
#<li>{{ '123456789'|truncatechars:5 }}</li> 结果:12... -- 时间 date:'Y-m-d'
#time = datetime.datetime.now()
#print(time) 结果:2019-03-01 18:58:00.597804
# <li>{{ time }}</li> 结果:March 1, 2019, 6:58 p.m.
#<li>{{ time|date:'Y-m-d' }}</li> 结果:2019-03-01 -- 转换原意 safe
#<li>{{ time|safe }}</li> 结果:2019-03-01 18:58:00.597804 #link = '<a href="https://www.baidu.com/">link</a>'
#<li>{{ link }}</li> 结果:<a href="https://www.baidu.com/">link</a>
#<li>{{ link|safe }}</li> 结果:link 一个可以点击跳转的连接
'''

三、标签(tag)

'''
1.语法:
-- {% 关键词 arg1 ... argn %} 2.常用:
-- 反向解析url {% url 'namespace:url_name' arg1 arg2 %}
eg: url(r'test/(\d+)/(\d+)/(\d+)/$', views.dtl, name='test')
{% url 'test' 1 2 3 %} => /test/1/2/3/ -- 当前时间now {% now 'Y-m-d' %}
eg:<li>{% now 'Y-m-d' %}</li> => 2019-03-01 -- 起别名with {% with '后面的别名flag就代表我' as flag %} {{ flag }} {% endwith %}
eg:link = '<a href="https://www.baidu.com/">link</a>'
{% with link|safe as lk %}
{{ lk }}
{{ lk }}
{{ lk }}
{% endwith %}
=>link link link {% with '123456789' as n %}
{{ n }}
{{ n }}
{{ n }}
{% endwith %}
=>123456789 123456789 123456789
{% with '123456789' as n %} 相当于 {% with n='123456789 %} n与=之间不能有空格 -- Django CSRF认证 {% csrf_token %}
#该页面为Django自身渲染, 渲染时告诉页面自身的认证条件,该页面发送post请求都可以通过认证
有了这行代码我们就可以不用注销中间件中的csrf认证,从而达到发送post请求的效果 '''

四、条件分支tag

'''
语法:
{% if 条件1 %}
结论1
{% elif 条件2 %}
结论2
{% else %}
结论n
{% endif %} 注:
1. if的条件可以添加filter
2. 可以嵌套 eg:
{% with 9|add:1 as num %} {% if num > 10 %}
<p>num值大于10</p>
{% elif num == 10 %}
<p>num值等于10</p>
{% else %}
{% if num > 5 %}
<p>num介于5与10</p> {% else %}
<p>num不大于5</p>
{% endif %}
{% endif %} {% endwith %} =>num值等于10
'''

五、迭代器tag

'''
{% for foo in iterate %}
{{ forloop }}
{% empty %}
可迭代对象为空
{% endfor %} 注:
1. iterate为可迭代对象
2. iterate可以添加filter
3. forloop变量为存放迭代信息的字典
{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}
父级forloop字典,开始索引从0编号或1编号,倒序索引从0编号或1编号,是否是第一次或最后一次循环
4. empty分支会在可迭代对象不存在或空时执行
eg: {% for n in 31425|make_list %}
<p>{{ forloop }}</p>
<p>第{{ forloop.counter }}次迭代</p>
<p>{{ n }}</p>
<hr>
{% endfor %} eg:ll = [[1, 2, 3], [4, 5, 6]]
{% for l in ll %}
{% for n in l %}
<p>外层{{ forloop.parentloop.counter }} - 内层{{ forloop.counter }}</p>
{{ n }}
<hr>
{% endfor %}
{% empty %}
<p>迭代的ll不存在或为空</p>
{% endfor %}
外层1 - 内层1
1 外层1 - 内层2
2 外层1 - 内层3
3 外层2 - 内层1
4 外层2 - 内层2
5 外层2 - 内层3
6
'''

六、自定义过滤器与标签

'''
步骤:
1. 在注册的app下创建templatetags包
2. 在模板中自定义模块py文件,如:owen_tags.py
3. 要在使用自定义filter与tag的模板页面中加载自定义模块py文件,案例:{% load owen_tags %} 4. 自定义filter语法
from django.template import Library
register = Library()
@register.filter(name='jump')
def owen_jump(value, arg):
try:
return value * int(arg)
except (ValueError, TypeError):
return '' 5. 自定义tag语法
@register.simple_tag(name='add_two')
def owen_add(arg1, arg2):
try:
return int(arg1) + int(arg2)
except (ValueError, TypeError):
try:
return arg1 + arg2
except Exception:
return '' 6. 在加载了自定义模块py文件的模板页面中使用,案例:
{{ 10|jump:2}} # 10 * 2 =>20
{{ 'a'|jump:3 }} #'a'*3 => 'aaa'
{% add_two 10 20 %} # 10 + 20 =>30
{% add_two 'hello' 'world' %} # 'hello'+'world' =>'helloworld'
{% add_two 10 'dollor' %} #没有返回值,不是同类型,无法相加 '''

七、全系统过滤器(了解)

{{ 123|add:"" }} 给value加上一个数值
{{ "AB'CD"|addslashes }} 单引号加上转义号,一般用于输出到javascript中
{{ "abcd"|capfirst }} 第一个字母大写
{{ "abcd"|center:"" }} 输出指定长度的字符串,并把值对中
{{ "123spam456spam789"|cut:"spam" }} 查找删除指定字符串
{{ value|date:"F j, Y" }} 格式化日期
{{ value|default:"(N/A)" }} 值不存在,使用指定值
{{ value|default_if_none:"(N/A)" }} 值是None,使用指定值
{{ 列表变量|dictsort:"数字" }} 排序从小到大
{{ 列表变量|dictsortreversed:"数字" }} 排序从大到小
{{ string|escape }} 转换为html实体
{{ 21984124|filesizeformat }} 以1024为基数,计算最大值,保留1位小数,增加可读性
{{ list|first }} 返回列表第一个元素
{{ "ik23hr&jqwh"|fix_ampersands }} &转为&
{{ 13.414121241|floatformat }} 保留1位小数,可为负数,几种形式
{{ 13.414121241|floatformat:"" }} 保留2位小数
{{ 23456 |get_digit:"" }} 从个位数开始截取指定位置的1个数字
{{ list|join:", " }} 用指定分隔符连接列表
{{ list|length }} 返回列表个数
{% if 列表|length_is:"" %} 列表个数是否指定数值
{{ "ABCD"|linebreaks }} 用新行用
{{ "ABCD"|linebreaksbr }} 用新行用 标记包裹
{{ 变量|linenumbers }} 为变量中每一行加上行号
{{ "abcd"|ljust:"" }} 把字符串在指定宽度中对左,其它用空格填充
{{ "ABCD"|lower }} 小写
{{ "abcdefghijklmnopqrstuvwxyz"|phone2numeric }} 把字符转为可以对应的数字??
{{ 列表或数字|pluralize }} 单词的复数形式,如列表字符串个数大于1,返回s,否则返回空串
{{ 列表或数字|pluralize:"es" }} 指定es
{{ 列表或数字|pluralize:"y,ies" }} 指定ies替换为y
{{ object|pprint }} 显示一个对象的值
{{ 列表|random }} 返回列表的随机一项
{{ string|removetags:"br p div" }} 删除字符串中指定html标记
{{ string|rjust:"" }} 把字符串在指定宽度中对右,其它用空格填充
{{ 列表|slice:":2" }} 切片
{{ string|slugify }} 字符串中留下减号和下划线,其它符号删除,空格用减号替换
{{ 3|stringformat:"02i" }} 字符串格式,使用Python的字符串格式语法
{{ "EABCD"|striptags }} 剥去[X]HTML语法标记
{{ 时间变量|time:"P" }} 日期的时间部分格式
{{ datetime|timesince }} 给定日期到现在过去了多少时间
{{ datetime|timesince:"other_datetime" }} 两日期间过去了多少时间
{{ datetime|timeuntil }} 给定日期到现在过去了多少时间,与上面的区别在于2日期的前后位置。
{{ datetime|timeuntil:"other_datetime" }} 两日期间过去了多少时间
{{ "abdsadf"|title }} 首字母大写
{{ "A B C D E F"|truncatewords:"" }} 截取指定个数的单词
{{ ""|truncatewords_html:"" }} 截取指定个数的html标记,并补完整
{{ list|unordered_list }} 多重嵌套列表展现为html的无序列表
{{ string|upper }} 全部大写
{{ string|urlize }} 将URLs由纯文本变为可点击的链接。(没有实验成功)
{{ string|urlizetrunc:"" }} 同上,多个截取字符数。(同样没有实验成功)
{{ "B C D E F"|wordcount }} 单词数
{{ "a b c d e f g h i j k"|wordwrap:"" }} 每指定数量的字符就插入回车符
{{ boolean|yesno:"Yes,No,Perhaps" }} 对三种值的返回字符串,对应是 非空,空,None

一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)的更多相关文章

  1. margin标记可以带一个、二个、三个、四个参数,各有不同的含义。

    margin标记可以带一个.二个.三个.四个参数,各有不同的含义. margin: 20px;(上.下.左.右各20px.) margin: 20px 40px;(上.下20px:左.右40px.) ...

  2. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  3. 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器

    一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...

  4. Java单元测试工具:JUnit4(一)(二)(三)(四)

    Java单元测试工具:JUnit4(一)--概述及简单例子 Java单元测试工具:JUnit4(二)--JUnit使用详解 Java单元测试工具:JUnit4(三)--JUnit详解之运行流程及常用注 ...

  5. 【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)

    一.TCP/IP协议簇(DoD参考模型) 用于简化OSI层次,以及相关的标准. 传输控制协议(tcp/ip)簇是相关国防部DoD所创建的,主要用来确保数据的完整性以及在毁灭性战争中维持通信 是由一组不 ...

  6. Java Spring Boot VS .NetCore (二)实现一个过滤器Filter

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  7. JavaWeb学习笔记(二十二)—— 过滤器filter

    一.什么是过滤器 过滤器filter是JavaWeb三大组件之一,它与Servlet很相似!不过过滤器是用来拦截请求的,而不是处理请求的.WEB开发人员通过Filter技术,对web服务器管理的所有w ...

  8. 三种实现日志过滤器的方式 (过滤器 (Filter)、拦截器(Interceptors)和切面(Aspect))

    1.建立RequestWrapper类 import com.g2.order.server.utils.HttpHelper; import java.io.BufferedReader; impo ...

  9. Filter学习(二)Filter使用Decorator设计模式

    在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...

随机推荐

  1. asp.net拦截器

    一 拦截器又称过滤器. asp.net mvc本身是自带3种拦截器:Action拦截器.Result拦截器.Exception拦截器. 应用中常见的拦截器有日志拦截器(Action拦截器)和异常处理拦 ...

  2. FCN的理解

    FCN特点 1.卷积化 即是将普通的分类网络丢弃全连接层,换上对应的卷积层即可 2.上采样 方法是双线性上采样差 此处的上采样即是反卷积3.因为如果将全卷积之后的结果直接上采样得到的结果是很粗糙的,所 ...

  3. oracle 常用(二)

    多表查询: 1.等值连接查询: select a.aa,a.bb,b.qq from XX  a ,   CC  b   where a.aa= b.ee 2.不等值连接: select  *  fr ...

  4. JavaScript学习笔记之call和apply

    前端的知识面太广了,想要记住所有知识点是不可能的,所以将这些学过的记录下来,随时都可以翻开来参考 1.call方法 调用一个对象的一个方法,call(this, arg1, arg2,argN);用来 ...

  5. LeetCode141.环形链表

    给定一个链表,判断链表中是否有环. 进阶:你能否不使用额外空间解决此题? /** * Definition for singly-linked list. * class ListNode { * i ...

  6. Bootstrap-全局CSS样式-图片样式

    Bootstrap第二部分:全局CSS样式-图片样式.img-rounded   圆角图片.img-circle    圆形图片.img-thumbnail 缩略图片.img-responsive响应 ...

  7. vm虚拟机出现Disk启动失败

    https://jingyan.baidu.com/article/a501d80c0e45b8ec630f5ed6.html

  8. hdu5441 并查集+克鲁斯卡尔算法

    这题计算 一张图上 能走的 点对有多少个  对于每个限制边权 , 对每条边排序,对每个查询排序 然后边做克鲁斯卡尔算法 的时候变计算就好了 #include <iostream> #inc ...

  9. eclipse更换workspace需要重新设置的内容

    .jdk Window-->java-->Installed JREs,新增或修改你所需要的jdk版本,点击需要的jdk-->edit 在Default VM arguments里面 ...

  10. RabbitMQ CentOS6.5 安装

    1.安装前准备工作 1)安装RbbitMQ之前先安装ErLang 2)安装ErLang之前需要安装最新的socat 3)安装方式有多种,可以下包安装,可以直接下载rpm文件安装,推荐前者. 4)安装的 ...