模板分为静态部分和动态部分,其中动态部分主要就是模板语言,下面通过模板变量、标签、过滤器、注释几个方面进行说明。
1.模板变量首先打开book/views.py文件,创建一个test_book()视图函数(这里创建一个类进行调用);
class Test_book:
def __init__(self):
pass
def pfunc(self):
return "hello"
def test_book(request):
tb = Test_book()
return render(request,'book/test_book.html',{"tb":tb})
接着,打开book/urls.py文件并进行url配置;
url(r"^test_book",test_book),
然后,在templates/book下创建test_book.html,代码如下:
Title
{{ tb.pfunc }}
效果如下:
2.标签
模板中的常见标签有for、if、比较运算符、布尔运算符等,下面简单创建一个应用说明。
将上述的test_book.html进行修改,代码如下:
Title
{{ tb.pfunc }}
{{book.0}} - {{book.1}}
| 编号 | 书名 | 价格 |
|---|---|---|
| {{book.id}} | {{book.bname}} | {{book.bprice}} |
效果如下:
3.过滤器
先对过滤器进行一个基本使用,继续对test_book.html进行修改;
Title
{{ tb.pfunc }}
{{book.0}} - {{book.1}}
| 编号 | 书名 | 价格 | 出版时间 |
|---|---|---|---|
| {{book.id}} | {{book.bname}} | {{book.bprice}} | {{book.bpub_date|date:'Y-m-d H:i:s'}} |
效果如下:
若想要使上述表格中的偶数行变灰,奇数行不变,并且过滤一串文字,这里需要用到自定义过 滤器。
首先在book应用下创建一个templatetags包,在包下创建filters.py文件,代码如下:
from django.template import Library
# 创建Library对象
register = Library()
# 使用装饰器进行处理,定义求余函数filterid(),将num对2求余
@register.filter
def filterid(num):
return num%2 == 0
@register.filter
def filtertext(temp):
return "过滤器使用的是 | 来使用"
接着修改test_book.html中的代码;
Title
{{ tb.pfunc }}
{% load filters %}
{{book.0}} - {{book.1}}
{{ desc|filtertext }}
| 编号 | 书名 | 价格 | 出版时间 |
|---|---|---|---|
| {{book.id}} | {{book.bname}} | {{book.bprice}} | {{book.bpub_date|date:'Y-m-d H:i:s'}} |
效果如下:
4.注释
这里简单说明一下注释。
# 单行注释
{# 注释内容 #}
# 多行注释
{% comment %}
注释内容
{% endcomment %}
5.继承模板
继承模板主要是为了提高代码重用性或减少代码冗余率,以减少开发人员的工作量。
首先在templates下创建一个layout.html作为一个父模板;
{% block titleTpl %}
中大南方
{% endblock titleTpl %}
- 首页
- 产品
- 关于我们
粤2006 中大南方
{% endblock contentTpl %}接着在templates/book下创建子模板的tpl_extends.html文件;
{% extends "layout.html" %}
{% block titleTpl %}
中大南方-首页
{% endblock titleTpl %}
{% block contentTpl %}
粤2006 中大南方
- 联系电话
- 地址
- 邮箱
然后,在book/views.py文件下,创建一个test_tpl_extends()视图函数,并配置路由;
def test_tpl_extends(request):
return render(request,'book/tpl_extends.html')
url(r"^test_tpl_extends",test_tpl_extends),
效果如下:
6.HTML转义
转义后的代码不会被直接解释执行,而是直接呈现出来,这是为了防止客户端通过嵌入js代码来 攻击网站。
创建一个视图函数test_escape()来实现
def test_escape(request):
con = 'content'
return render(request,'book/test_escape.html',{'con':con})
编写templates/book/test_escape.html代码如下:
HTML模板转义
结果:{{ con }}
禁用转义后的结果:{{con|safe}}
效果如下:
7.CSRF防御
之前我们为了防止CSRF的攻击,之间在settings.py处注释了CSRF,但这是不安全的,因此我 们通过以下的方法来解决。
创建一个视图函数test_csrf(),并配置路由url;
def test_csrf(request):
return render(request,'book/csrf_test.html')
url(r"^test_csrf",test_csrf),
接着,编写templates/book/test_csrf.html代码如下:
Title
通过这样,POST请求的表单便可以正常进行,效果如下:



