生命是一个过程,可悲的是它不能重来。一个人,一辈子,一条路,一片天,随着年龄的增长,观点,心态,也就随之改变!
总结:
- 对于字典dict(keys,values,items),dict.a相当与dict的key访问;记住:数据的访问基本上都用点;()、[]都不能用在{{}}中;
- < 等价于 < ;
- csrf_token 表单隐藏控件,post提交的时候 如果采用form表单,提交的时候会将hidden一并传回来
模板中插入 更加复杂的数据需要用到 Django的专属语言DTL;混写前后端不推荐使用;
JSP\ASP\PHP
1. DTL语法(属于前后端 混写方式)
变量\标签\注释\过滤器
1 变量
语法 {{ variable }}
变量名由字母、数字、下划线、点号组成。
点号使用的时候,例如foo.bar,遵循以下顺序:
- 字典查找,例如foo["bar"],把foo当做字典,bar当做key
- 属性或方法的查找,例如foo.bar,把foo当做对象,bar当做属性或方法
- 数字索引查找,例如foo[bar],把foo当做列表一样,使用索引访问
from django.conf.urls import url
from django.contrib import admin
from django.http import HttpRequest, HttpResponse, JsonResponse
from django.template import loader
from django.template.backends.django import Template
from django.shortcuts import render
class School:
def __init__(self):
self.name = 'magedu.net'
def index(request:HttpRequest):
"""视图函数:请求进来返回响应"""
context = {'school':School(),
'name':'magedu',
'testlist':list(range(10,20)),
'testdict':{'a':100,'b':'abc','c':School(),'d':list(range(1,8))}} #正文字符串 数据传输
return render(request,'index.html',context,status=201)
# dict key调用
urlpatterns = [
url(r'^admin/', admin.site.urls), # 正则表达式模式匹配
url(r'^$', index), # 以它开头、结尾的;
url(r'^index$', index), # 以 index开头 index1、index/ ;
# 两个不同的函数指向同一个问题url;不是多对多;
]
// html
{{school}}} <br>
{{school.name}}<br>
{{testlist}}<br>
{{testdict.c.name}}
如果变量未能找到,则缺省插入空字符一串
在模板中调用方法,不能加小括号,自然也不能传递参数;
{{my_dict.a}}符合第一条,当作字典的key就可以访问到了;
{{ my_dict.keys }} 访问所有的key这样是对的,不能写成{{ my_dict.keys() }}。符合第二条,当做my_dict对象的属性或方法。
2. 模板标签
2.1 if/else 标签
基本语法格式如下:
{% if condition %}
... display
{% endif %}
或者:
{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}
// 实例
{% if testdict.a > 50 %}
{{testdict.a}} <br>
<=50
#-------------------------------------
100
<=50
条件也支持and、or、not
注意,因为这些标签是断开的,所以不能像Python一样使用缩进就可以表示出来,必须有个结束标签,例如 endif、endfor。
2.2 for 标签
https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#for
<ul>
{%for k in testdict.keys%}
<li>testdict key={{k}}}</li>
{% endfor %}
</ul>
#------------------------------------------------------------------------
testdict key=a}
testdict key=b}
testdict key=c}
testdict key=d}
// 反转列表 reversed
<ul>
{%for k in testlist reversed%}
<li>{{forloop.counter0}} key={{k}}}</li> // forloop.revcounter0 反转 序号;
{% endfor %}
</ul>
#------------------------------------------------------
0 key=19}
1 key=18}
2 key=17}
3 key=16}
4 key=15}
5 key=14}
6 key=13}
7 key=12}
8 key=11}
9 key=10}
{{forloop.first}} // 是否第一行
{{forloop.last}} // 是否最后一行
变量 | 说明 |
---|---|
for loop.counter | 当前循环从1开始的计数 |
for loop.counter 0 | 当前循环从0开始的计数 |
for loop.rev counter | 从循环的末尾开始倒计数到1 |
for loop.rev counter 0 | 从循环的末尾开始到计数到0 |
for loop.first | 第一次进入循环 |
for loop.last | 最后一次进入循环 |
for loop.parent loop | 循环嵌套时,内层当前循环的外层循环 |
给标签增加一个 reversed 使得该列表被反向迭代:
{% for athlete in athlete_list reversed %}
...
{% empty %}
... 如果被迭代的列表是空的或者不存在,执行empty
{% endfor %}
可以嵌套使用 {% for %} 标签:
{% for athlete in athlete_list %}
<h1>{{ athlete.name }}</h1>
<ul>
{% for sport in athlete.sports_played %}
<li>{{ sport }}</li>
{% endfor %}
</ul>
{% endfor %}
2.3 ifequal/ifnotequal 标签
{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。
下面的例子比较两个模板变量 user 和 currentuser :
{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% endifequal %}
和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签:
{% ifequal section 'sitenews' %}
<h1>Site News</h1>
{% else %}
<h1>No News Here</h1>
{% endifequal %}
其他标签
csrf_token 用于跨站请求伪造保护,防止跨站攻击的。
表单控件,post提交的时候 如果采用form表单,提交的时候会将hidden一并传回来;
{% csrf_token %}
3. 注释标签
单行注释{##}。
多行注释{%comment%} ...{%end comment%}
{# 这是一个注释 #}
{% comment %}
这是多行注释
{% endcomment %}.
4. 过滤器()
模板过滤器可以在变量被显示前修改它。
推荐 数据在使用之前就准备好,不需要管道 的 临时操作;
语法 {{ 变量|过滤器 }}
过滤器使用管道字符 | ,例如{{ name|lower }},{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写。
过滤管道可以被套接 ,一个过滤器管道的输出又可以作为下一个管道的输入,例如{{ my_list|first|upper }},将列表第一个元素并将其转化为大写。
过滤器传参
有些过滤器可以传递参数,过滤器的参数跟随冒号之后并且总是以双引号包含。
例如:{{ bio|truncatewords:"30" }},截取显示变量 bio 的前30个词。
{{ my_list|join:"," }},将my_list的所有元素使用,逗号连接起来
其他过滤器
过滤器 | 说明 | 举例 |
---|---|---|
first | 取列表第一个元素 | |
last | 取列表最后元素 | |
yesno | 变量可以是True、False、None yesno的参数给定逗号分隔的三个值,返回3个值中的一个。 True对应第一个 False对应第二个 None对应第三个 如果参数只有2个,None等效False处理 |
{{ value | yesno:"yeah,no,maybe"}} |
add | 加法。参数是负数就是减法 | 数字加{{ value | add:"100"}} 列表合并{{mylist | add:newlist}} |
divisibleby | 能否被整除 | {{value|divisibleby:3”}}能被3整除返回True |
addslashes | 在反斜杠、单引号或者双引号前面加上反斜杠 | {{value|addslashes} } |
length | 返回变量的长度 | {%if my_list|length>1%} |
default | 变量等价False则使用缺省值 | {{value|default:”nothing”} } |
default_if_none | 变量为None使用缺省值 | {{value|default_if_none:"nothing"}} |
date | 格式化date或者datetime对象 | 实例:{{my_dict.date|date:Y nj}} Y2000年 n1~12月 j1~31日 |
时间的格式字符查看 https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#date
网友评论