Django模板标签
常用标签
(1)if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断。ifequal/ifnotequal
(2)for…in…:跟python中的for…in…是一样的用法。
forloop.counter:当前迭代的次数,下标从1开始。
forloop.counter0:当前迭代的次数,下标从0开始。
forloop.revcounter:跟forloop.counter一样,下标从大到小。
forloop.revcounter0:跟forloop.counter0一样,下标从大到小。
forloop.first:返回bool类型,如果是第一次迭代,返回true,否则返回false。
forloop.last:返回bool类型,如果是最后一次迭代,返回True,否则返回False。
forloop.parentloop:如果发生多层for循环嵌套,那么这个变量返回的是上一层的for
(3)for…in…empty…:如果没有数据,跳转到empty中。
(4)load:加载第三方标签。最常用的是{%load static%}
(5)url:返回一个命名了的URL的绝对路径。
(6)with:缓存一个变量。
(7)autoescape:开启和关闭自动转义
def test_10(request, bn):
return render(request, 'book_templates_10.html', context={'name': bn,
'li': li,
'qwer': li,
'html': '<h1>hello guys!<h1>'
})
def test_11(request):
return HttpResponse('这仅仅只是一个测试')
url(r'test_10/(\w+)/$', views.test_10)
url(r'test_11/$', views.test_11, name='test_11_2')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板标签</title>
</head>
<body>
if的使用<br>
{% if name == 'python' %}
这是python的页面
{% elif name == 'django' %}
这是django的页面
{% else %}
这是{{ name }}的页面
{% endif %}
<br>
for的使用<br>
{% for i in li %}
{% if forloop.counter0 == 0 %}
<ul>
<li>这是第三个值{{ i }}</li>
</ul>
{% else %}
<ul>
<li>{{ i }}</li>
</ul>
{% endif %}
{% for foo in li %}
{% if forloop.parentloop.counter == 1 %}
这是又一个{{ foo }}
{% endif %}
{% endfor %}
{% empty %}
没有内容的时候输出
{% endfor %}
<br>
我要测试11的链接1
<a href="/book/test_11">url1</a><br>
我要测试11的链接2
<a href="{% url 'test_11_2' %}">url2</a>
<br>
with的用法:用来重命名<br>
{% with qwer as qq %}
{{ qq }}<br>
{{ qq }}<br>
{{ qq }}
{% endwith %}
<br>
原始的{{ html }}
<br>
一句话用safe过滤器{{ html | safe }}
<br>
一段用模板标签:
{% autoescape off %}
{{ html }}
{% endautoescape %}
</body>
</html>
模板继承与引用
Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。
继承:
模板继承使用extends标签实现。通过使用block来给子模板开放接口。
1、extends必须是模板中的第一个出现的标签。
2、子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
3、如果出现重复代码,就应该考虑使用模板。
4、尽可能多的定义block,方便子模板实现更细的需求。
5、如果在某个block中,要使用父模板的内容,使用block.super获取。
引用
引用:include标签可以包含一个html模板到当前模板中。和继承不同,include是把html模板在此处展开。
例如:{% include ‘head.html’%}
基本页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}默认的标题{% endblock %}</title>
</head>
<body>
这是一个基本页面 <br>
{% block xxx %}
my god!
{% endblock %} <br>
block是用于开一条路让子文件去修改的
</body>
</html>
extends为第一个出现的标签
{% extends 'note_templates_base.html' %}
{% block xxx %}
这句是通过block.super继承父类的:{{ block.super }}<br>
my guys!<br>
这是通过include引用的modfier模板 <br>
{% include 'note_templates_modfier.html' %}
{% endblock %}
modfier的内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hi knight!
</body>
</html>
注释标签
1、{#被注释的内容#}:将中间的内容注释掉。只能单行注释。
2、{comment}被注释的内容{endcomment}:可以多行注释。