目录
三、模板语法 - 过滤器 :{ { 位置参数1 | 过滤器函数 : 位置参数2}}
1- default :如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。
2- length : 返回值的长度。它对字符串和列表都起作用
3- filesizeformat :将值格式化为一个可读性高的文件尺寸
6- truncatechars :如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
7- safe :是否转义输入框内的html、js元素等(使用-转义;不使用-不转义)
四、模板语法 - 标签 : {% tag %} …… {% endtag%}
1-2 for …… empty :若循环对象为空执行empty内代码块
4、csrf_token 标签:跨站请求伪造保护 {% csrf_token%}
1、自定义标签(参数不限,但不能放在if for语句中)- @register.simple_tag
1-1 @register.inclusion_tag --- 返回可迭代对象(qureyset对象)
一、模板概念
DTL语言 - Django Template Language
你可能已经注意到我们在例子视图中返回文本的方式有点特别。 也就是说,HTML被直接硬编码在 Python代码之中。
def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到你的视图里却并不是一个好主意。
对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。 站点设计的修改往往比底层 Python 代码的修改要频繁得多,因此如果可以在不进行 Python 代码修改的情况下变更设计,那将会方便得多。
Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成。 设计者和HTML/CSS的编码人员不应该被要求去编辑Python的代码来完成他们的工作。
程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python又包含 HTML 的文件的编辑工作。
因此,将页面的设计和Python的代码分离开会更干净简洁更容易维护。 我们可以使用 Django的 模板系统 (Template System)来实现这种模式,这就是本章要具体讨论的问题
python的模板:HTML代码+模板语法
# 视图函数 传输数据给模板 def inde_action(request): # 推荐写法 name = 'name1' list00 = [1,2,3,'hello','django'] dic = {'name':'name2','age':18} def test(): print('hello world') return 'fun-test' class Person(): pass # locals()方法可以返回视图函数内所有定义的 变量、函数、类等 return render(request, 'index.html', locals())
二、 模板语法 - 变量 : { { 变量 }}
1、直接调用输出 - 相当于print
{#模板语言注释:前端看不到#} {#相当于print了该变量#} <h1>模板语言之变量</h1> <p>字符串:{ { name }}</p> <p>数字:{ { age }}</p> <p>列表:{ { ll }}</p> <p>元组:{ { tu }}</p> <p>字典:{ { dic }}</p> {#只写函数名:相当于函数名(),执行该函数,显示的是返回值#} <p>函数:{ { test }}</p> {#对象调用显示内存地址#} <p>对象:{ { lqz }}</p> {# person_list=[p1,p2] #} <p>列表套对象:{ { person_list }}</p> {# person_dic={'p1':p1} #} <p>字典套对象:{ { person_dic }}</p>
2、深度取值 - 获取对象内部值
<h1>深度查询</h1> {# 一层 #} <p>列表第0个值:{ { ll.0 }}</p> <p>列表第4个值:{ { ll.3 }}</p> <p>字典取值:{ { dic.name }}</p> <p>字典取列表值:{ { dic.ll }}</p> {# 二层 #} <p>对象取数据属性:{ { p1.name }}</p> <p>对象取绑定给对象的函数属性:{ { p1.get_name }}</p> <p>对象取绑定给类的函数属性:{ { p1.cls_test }}</p> <p>对象取静态方法:{ { p1.static_test }}</p> <p>把对象列表中,其中对象的一个年龄属性取出来:{ { person_list.1.age }}</p> {# 注意:不能调有参数的方法 #} <p>字符串的方法:{ { name.upper }}</p>
三、模板语法 - 过滤器 :{ { 位置参数1 | 过滤器函数 : 位置参数2}}
1- default :如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。
{ { value|default:"nothing" }}
2- length : 返回值的长度。它对字符串和列表都起作用
{ { value|length }} {#如果 value 是 ['a', 'b', 'c', 'd'],那么输出是 4。#}
3-
filesizeformat :
将值格式化为一个可读性高的文件尺寸{ { value|filesizeformat }} {# 如果 value 是 123456789,输出将会是 117.7 MB #}
4- date :格式化日期
value=datetime.datetime.now() { { value|date:"Y-m-d" }} {# 不使用date:Nov. 9, 2018, 6:51 p.m. #} {# date:2018-11-09 #}
5- slice:切片操作
{#前闭后开区间#} <p>过滤器之slice:{ { ll|slice:'2:-1' }}</p> {#支持步长#} <p>过滤器之slice-字符串:{ { name|slice:'0:3:3' }}</p>