Django - 模板层 - 变量、过滤器、标签 - DTL语言

目录

一、模板概念

二、 模板语法 - 变量 : { { 变量 }}

1、直接调用输出 - 相当于print

2、深度取值 - 获取对象内部值

三、模板语法 - 过滤器 :{ { 位置参数1 | 过滤器函数 : 位置参数2}}

1- default :如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。 

2- length : 返回值的长度。它对字符串和列表都起作用

3- filesizeformat :将值格式化为一个可读性高的文件尺寸 

4- date :格式化日期

5- slice:切片操作

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

7- safe :是否转义输入框内的html、js元素等(使用-转义;不使用-不转义)

8- 其他过滤器

四、模板语法 - 标签 : {% tag %} …… {% endtag%}

1- for标签:循环结构

1-1 查看循环信息:{ { forloop }}

1-2 for …… empty :若循环对象为空执行empty内代码块

2、if标签:逻辑判断

3、with 标签: 取别名,简化变量名

4、csrf_token 标签:跨站请求伪造保护 {% csrf_token%}

五、自定义模板语法

1、自定义标签(参数不限,但不能放在if for语句中)- @register.simple_tag

1-1 @register.inclusion_tag --- 返回可迭代对象(qureyset对象)

2、自定义过滤器 - @register.filter


 

一、模板概念

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>
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值