浏览目录

  • 标签
  • 过滤器

一、标签 Tags

1、普通变量

  • 普通变量用{{ }}
  • 变量名由数字、字母、下划线组成
  • 点.在模板语言中用来获取对象相应的属性值

示例:

1
2
3
4
5
6
7
8
{ # 取variable中的第一个参数 #}
{{ variable. 0  }}
{ # 取字典dic中key的值 #}
{{ dic.key }}
{ # 取obj_list对象列表中第一个对象的attr属性值 #}
{{ obj_list. 0.attr  }}
{ # 点操作只能调用不带参数的方法 #}
{{ obj_list. 0.method  }}  

2、逻辑判断

逻辑判断用{% %}

for

  • 语法:{% for item in item_list %}...{% empty %}...{% endfor %}
  • 作用:循环item_list,如果item值为空或不存在,则会执行empty中的代码,切记要写endfor结束循环
  • 常用for循环参数:

Variable Description
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环

if

  • 语法:
    1
    { %  if  some_condition  % }...{ %  elif  other_condition  % }...{ %  endif  % }
  • 作用:条件判断,切记要写endif结束条件判断
  • 常用与if语句结合的判断关键字 
    1
    { %  if  some_condition  % }...{ %  elif  other_condition  % }...{ %  endif  % }

with

  • 语法
1
{ %  with new_variable  =  old_variable  % }.....{ %  endwith  % }
  • 作用:定义中间变量

csrf_token

  • 语法:在页面的每个form表单中写上

1
{ %  csrf_token  % }
  • 作用:用于跨站请求伪造保护

注释

语法:

1
{ # 注释内容 #}

3、母板系统

继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html lang = "en" >
<head>
   <meta charset = "UTF-8" >
   <meta http - equiv = "x-ua-compatible"  content = "IE=edge" >
   <meta name = "viewport"  content = "width=device-width, initial-scale=1" >
   <title>Title< / title>
   { %  block page - css  % }
   
   { %  endblock  % }
< / head>
<body>
 
<h1>这是母板的标题< / h1>
 
{ %  block page - main  % }
 
{ %  endblock  % }
<h1>母板底部内容< / h1>
{ %  block page - js  % }
 
{ %  endblock  % }
< / body>
< / html>
  • 语法
1
{ %  extends  'base.html'  % }
  • 作用:在子页面中在页面最上方使用上面的语法来继承母板

块block

  • 语法
1
{ %  block block_name  % }...{ %  endblock  % }
  • 作用:在子页面中通过定义母板中的block名来对应替换母板中相应的内容

示例:

1
2
3
4
5
{ %  block page - main  % }
   <p>世情薄< / p>
   <p>人情恶< / p>
   <p>雨送黄昏花易落< / p>
{ %  endblock  % }

组件

  • 语法
1
{ %  include  'subassembly.html'  % } 
  • 作用:可以将常用的固定的HTML内容保存在单独的文件中,在需要的地方用以上语法导入使用

4、静态文件相关

在Settings中设置static静态文件夹,在html中导入。

语法:

1
{ %  load static  % }  

例如:

扫描二维码关注公众号,回复: 2983387 查看本文章
1
2
{ %  load static  % }
<img src = "{% static " images / hi.jpg " %}"  alt = "Hi!"  / >

引用JS文件时使用:

1
2
{ %  load static  % }
<script src = "{% static " mytest.js " %}" >< / script>

某个文件多处被用到可以存为一个变量  

1
2
3
{ %  load static  % }
{ %  static  "images/hi.jpg"  as myphoto  % }
<img src = "{{ myphoto }}" >< / img>

使用get_static_prefix

1
2
{ %  load static  % }
<img src = "{% get_static_prefix %}images/hi.jpg"  alt = "Hi!"  / >  

或者

1
2
3
4
5
{ %  load static  % }
{ %  get_static_prefix as STATIC_PREFIX  % }
 
<img src = "{{ STATIC_PREFIX }}images/hi.jpg"  alt = "Hi!"  / >
<img src = "{{ STATIC_PREFIX }}images/hi2.jpg"  alt = "Hello!"  / >  

5、自定义simple_tag

  • 作用:可以自定义标签,注册后可使用
  • 自定义simple_tag的步骤(与自定义Filter类似,不过接收更灵活的参数)

    • 在项目的app中创建名为templatetags的文件夹
    • 在templatetags的文件夹中创建自定义的py文件,例如:custom_simpletag.py
    • custom_simpletag.py中编写自定义simple_tag,例如:

1
2
3
4
5
6
from  django  import  template
register  =  template.Library()
 
@register .simple_tag(name = "my_simpletag" )
def  add_simpletag(a,b,c):  # 可接收多个参数
return  "{} + {} + {}" . format (a, b, c)
    • 使用自定义simple_tag前,首先在HTML页面中导入py文件 
1
2
{ %  load custom_simpletag  % }
{ %  my_simpletag  "1"  "2"  "3"  % } 

6、自定义inclusion_tag

  • 作用:返回html代码片段
  • 自定义inclusion_tag的步骤

    • 在项目的app中创建名为templatetags的文件夹
    • 在templatetags的文件夹中创建自定义的py文件,例如:custom_inclusiontag.py
    • custom_inclusiontag.py中编写自定义inclusiontag,例如:

1
2
3
4
5
6
7
8
from  django  import  template
register  =  template.Library()
 
@register .inclusion_tag( 'inclusion_tag.html' )
def  my_inclusiontag(n):
=  1  if  n <  1  else  int (n)
data  =  [ "第{}项" . format (i)  for  in  range ( 1 , n + 1 )]
return  { "data" : data}
    • 在templates文件夹中创建刚才注册的inclusion_tag.html文件
1
2
3
4
5
<ul>
   { %  for  choice  in  data  % }
   <li>{{ choice }}< / li>
   { %  endfor  % }
< / ul>
    • 使用自定义my_inclusiontag前,首先在HTML页面中导入py文件 
1
2
{ %  load custom_inclusiontag  % }
{ %  my_inclusiontag  10  % }

二、过滤器 Filter

1、内置过滤器

语法:

1
{{ value|filter_name:args }}

注意:管道符前后没有空格  

default

  • 语法:
1
{{ value: default:  "自定义内容" }}  
  • 作用:如果value值没传的话就显示自定义内容

length

  • 语法:
1
{{ value|length }} 
  • 作用:返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.

filesizeformat

  • 语法:
1
{{ value|filesizeformat }}  
  • 作用:将value格式化为一个 “人类可读的” 文件大小格式

如果 value 是 123456789,输出将会是 117.7 MB。

slice

  • 语法:
1
{{value| slice : "start:end" }} 
  • 作用:切片

date

  • 语法:
1
{{ value|date: "Y-m-d H: i:s" }}  
  • 作用:将时间格式的value进行自定义格式化

safe

  • 语法:
1
{{value|safe}} 
  • 作用:取消Django对HTML标签和JS等语法标签进行自动转义,认为插入的HTML或JS是安全的不必转义

truncatechars

  • 语法:
1
{{ value|truncatechars:num}}  
  • 作用:如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“…”)结尾。num参数是指截断的字符数

2、自定义过滤器

 步骤

  • 在项目的app中创建名为templatetags的文件夹
  • 在templatetags的文件夹中创建自定义的py文件,例如:custom_filter.py
  • 在custom_filter.py中编写自定义过滤器,例如:

1
2
3
4
5
6
from  django  import  template
register  =  template.Library()
 
@register . filter (name = "my_filter" )
def  my_filter(value, arg):  #最多接收两个参数
return  value.replace(arg, "")
  • 使用自定义filter前,首先在HTML页面中导入py文件 
1
2
{ %  load custom_filter  % }
{{ variable|my_filter: "0"  }}