模板
1.模板的功能
产生html,控制页面上展示的内容。模板文件不仅仅是一个html文件,还包含两部分内容:
a)静态内容:css、js、html
b)动态内容:用于动态去产生一些网页内容。通过 模板语言 来产生。
2.模板文件的使用
通常是在视图函数中使用模板产生html内容返回给客户端:
a)加载模板文件,loader.get_template
b)定义模板上下文 RequestContext
c)模板渲染产生html页面内容 render
以上三步可以使用render()函数代替
3.模板文件加载的顺序
1)首先去配置的模板目录下找模板文件
2)去INSTALLED_APPS 下面的每一个应用去找模板文件,前提是应用中必须有templates文件夹
4. 模板语言
模板语言简称DTL,即Django Template Language。
5. 模板变量
模板变量名是由数字、字母、下划线和点组成,不能以下划线开头。使用模板变量:{{ 模板变量名 }}
模板变量的解析顺序:
例一:{ book.btitle }}:
1)首先把book当成一个 字典,把btitle当成键明,进行取值book[‘btitle’];
2)把book当成一个 对象,把btitle当成属性,进行取值book.btitle;
3)把book当成一个对象,把btitle当成对象的方法,进行取值book.btitle。
例二:{{ book.0 }}
1)首先把book当成一个字典,把0当成键明,进行取值book[‘0’];
如果解析失败,会用 用字符串 填充模板变量。
6. 模板标签
{% 代码段 %}
for循环:
{% for x in 列表 %}
#列表不为空时执行
{% empty %}
#列表为空时执行
{% endfor%}
可以通过{{ forloop.counter }}得到for循环遍历到了第几次
{% if 条件 %}
{% elif 条件 %}
{% else %}
{% endif %}
关系比较操作符: >、<、>=、<=、==、!=。
逻辑运算:not、and、or。
注意:进行比较操作时,比较操作符两边必须有空格!
7. 过滤器
过滤器用于对模板变量进行操作。
date:改变日期的显示格式
length:求长度。字符串、列表、元组、字典长度
default:设置模板变量的默认值
格式:模板变量 | 过滤器:参数
自定义过滤器
在应用下面创建文件夹templatetags,Django会在templatetags下默认创建_init_.py文件。接下来就可以在templatetags下创建py文件,自定义过滤器了。
1.新建过滤器filters文件(过滤器本质是python的函数)
要自定义过滤器必须要创建一个Library类对象,然后调用这个实例对象的fitler方法,让其作为装饰器方法py函数上方。
2.使用自定义函数
在html文件中加载filters文件
{% load filters %}
详情参考官方文档。
注意:自定义过滤器函数,最少有一个参数,最多两个参数。
8. 模板注释
单行注释:{# 注释内容 #}
多行注释:
{% comment %}
注释内容
{% endcomment %}
注意:模板注释后,在网页点击源代码是看不到被模板注释的代码。而html注释能看到。
9. 模板继承
目的:模板继承也是为了重复使用html页面,节省空间。
10. 继承语法:
{% extends '继承文件的路径' %}
11. 预留块
目的:可以重新父模板中的模板内容。
预留块语法
{% block 块名 %}
内容可写可不写
{% endblock 块名%}
父模板:
子模板:
浏览器:
属性:{{ block.super }}表示继承父模板的默认内容。
注意:把所有页面相同的内容放到父模板文件中,不需要放在块中,有些位置页面内容不同,需要在父模中预留块。
12. HTML转义
在 模板上下文中 的html标记默认是会被转义的。
小于号 > 转为<
大于号 < 转为>
单引号 ’ 转为'
双引号 " 转为&quto;
与符号 & 转为&
要关闭模板上下文字符串的转义:可以使用{{ 模板变量 | safe }}
也可以使用:
{% autoescape off %}
模板语言代码
{% endautoescape %}
模板硬编码:{{ 模板变量|default:<h1>hello</h1> }}中的字符串(即<h1>hello</h1>)默认不会转义,如果需要转义,需要手动转义。
13. csrf伪造,即跨站请求伪造