一、变量

'''
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. cocos2d-x JS 利用重复动作实现动画播放(实现倒计时)

    cocos2d-js: cc.delayTime() and cc.repeatForever() don't work together in cc.sequence() this.numm = 1 ...

  2. Servlet交互与JSP

    主要内容介绍 数据共享与页面跳转 1. 为什么要有跳转: Servlet需要跳转到其它Servlet中,因为我们需要职责分明,不同Servlet来完成不同的功能 Servlet跳转到JSP中,Serv ...

  3. python进阶(六) 虚拟环境git clone报错解决办法

    在虚拟环境目录,进行git clone xxxxx.git  项目,报如下图错误 解决办法:env GIT_SSL_NO_VERIFY=true git clone xxxx.git

  4. 刨根究底字符编码之—UTF-16编码方式

    在网上已经转悠好几天了, 这篇文章让我知道了UTF-16的前世今生, 感谢作者https://cloud.tencent.com/developer/article/1384687 1. UTF-16 ...

  5. python range函数

    这个函数很简单,就不写例子了,看看语法,拿来即用 python range() 函数可创建一个整数列表,一般用在 for 循环中. 函数语法 range(start, stop[, step]) 参数 ...

  6. linux帮助

    不知道的指令但是你想要了解:man 指令 如果知道某一个指令忘记相关参数:在指令后接 -- help 忘记指令: 两个tab

  7. MQ的使用场景

    一.消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,RabbitM ...

  8. flask 单个页面多个表单(单视图处理、多视图处理)

    单个页面多个表单 除了在单个表单上实现多个提交按钮,有时还需要在单个页面上创建多个表单.比如,在程序的主页上同时添加登录和注册表单.当在同一个页面上添加多个表单时,我们需要解决的问题是在视图函数中判断 ...

  9. selenium-java web自动化测试工具抓取百度搜索结果实例

    selenium-java web自动化测试工具抓取百度搜索结果实例 这种方式抓百度的搜索关键字结果非常容易抓长尾关键词,根据热门关键词去抓更多内容可以用抓google,百度的这种内容容易给屏蔽,用这 ...

  10. bzoj1594 Pku3764 The xor-longest Path

    题目链接 先求每个点到根的异或和 然后就要找出两个点,使dis[a]^dis[b]最大 注意异或的性质,我们可以用trie树,沿着与当前数字每位的相反方向走 #include<algorithm ...