一、常用语法
只需要记两种特殊符号:
{{ }} 与 {% %}
变量相关的用{{ }}
逻辑相关的用{% %}
1、变量
{{变量名}}
变量名由字母数字和下划线组成。
(.)点在模板中有特殊的含义,用来获取对象相应的属性值。
views.py中写下以测试代码
from django.shortcuts import render
# Create your views here.
def template_test(request):
list1=[11,22,33,44]
dict2={'name':'Monicx'}
class Person(object):
def __init__(self,name,age):
self.name =name
self.age=age
def dream(self):
return " {} is dream...".format(self.name)
Monicx =Person(name='monicx',age=23)
Liwenli =Person(name='Liwenli',age=23)
Xuwenqiang=Person(name='Xuwenqiang',age=21)
person_list=[Monicx,Liwenli,Xuwenqiang]
return render(request,'template_test.html',{'list1':list1,'dict2':dict2,'person_list':person_list})
在template_test.html的body中写入以下测试代码:
<body>
{# 取l中的第一个参数 #}
{{ list1.0 }}
<hr>
{# 取字典中key的值 #}
{{ dict2.name }}
<hr>
{# 取对象的name属性 #}
{{ person_list.0.name }}
<hr>
{# .操作只能调用不带参数的方法 #}
{{ person_list.1.dream }}
</body>
查看测试结果:
2、Filters
语法:{{value|filter_name:参数}}
default
{{ value|default:'monicx'}}
如果value没有被传值,默认显示为monicx。切记‘|’的两边没有空格!!!!!
length
{{value|length}}
返回value的长度,如果value是如下列表就显示4。
value=[11,22,33,44]
filesizeformart
{{value|filesizeformat}}
它会将值格式化成一个人可识别的文件大小。如果value是123456789,显示会是117.7MB。
date
格式化时间
{{value|date:'Y-m-d H:i:s'}}
safe
{{value|safe}}
告诉Django,valeue里面的内容是安全的,关闭HTML的自动转义。
truncatechars
如果字符串字符多于指定的字符数量,会被截断。截断的内容会显示成(...)。
参数:规定达至些字符数时截断。
{{value|truncatechars:200}}
3、自定义filter
app01/
__init__.py
models.py
templatetags/ # 在app01下面新建一个package package
__init__.py
app01_filters.py # 建一个存放自定义filter的文件
views.py
编写自己定义的filter
from django import template
register = template.Library()
@register.filter(name="tihuan")
def tihuan(value, arg):
return value.replace(arg, "")
@register.filter(name="addNB")
def add_NB(value):
return "{} NB".format(value)
使用:
{# 先导入我们自定义filter那个文件 #}
{% load app01_filters %}
{# 使用我们自定义的filter #}
{{ somevariable|tihuan:"monicx" }}
{{ dict2.name|addNB }}
for循环
<ul>
{% for foo in foo_list %}
...
{% endfor %}
</ul>
for循环可用的一些参数有:
Variable | Description |
---|---|
forloop.counter | 当前循环的索引值(从1开始) |
forloop.counter0 | 当前循环的索引值(从0开始) |
forloop.revcounter | 当前循环的倒序索引值(从1开始) |
forloop.revcounter0 | 当前循环的倒序索引值(从0开始) |
forloop.first | 当前循环是不是第一次循环(布尔值) |
forloop.last | 当前循环是不是最后一次循环(布尔值) |
forloop.parentloop | 本层循环的外层循环 |
if...empty
<ul>
{% for foo in foo_list %}
<li>{{ foo.xxx }}</li>
{% empty %}
<li>列表数据为空时显示的内容</li>
{% endfor %}
</ul>
还有if...else和if...elif...else.
if语句支持and、 or、 ==、 >、 <、 !=、 <=、 >=、 in、 not in、 is 、 is not的判断。
csrf_token
这个标签用保护跨站请求,防止伪造的。只要面页面的form里面加上{%csrf_token%}。
注意
1、Django的模板语言中的属性的优先级大于方法
2、Django的模板语言不支持连续的判断。