模板
1.模板语言
简称DTL(Django Template Language)
2.模板变量
模板变量名是由数字,字母,下划线和点组成的,不能以下划线开头
使用模板变量:{{ 模板变量名 }}
点前面的可能是字典,对象,列表
3.模板标签(比较操作符两边必须有空格)
模板标签的统一表达式:{% python代码 %}
遍历的次数:{{ forloop.counter }}
if语句的使用:
{% if 条件 %}
{% endif %}
3.1模板过滤器
date: 改变日期的显示格式
length: 求长度。字符串,列表
default: 设置模板变量的默认值
格式:模板变量 | 过滤器:参数
4.自定义过滤器函数,至少有一个参数,最多两个参数
5.django的注释
单行注释:{# 注释内容 #}
多行注释:{% comment %}注释内容{% endcomment %}
6.模板的继承
{% extends 'booktest/base.html' %} 这行代码继承父模板(base.html)的所有内容
{% block 块名 %}
{{ block.super }}
block.super可以获取父模块的内容
这里可以写子模版想要写的内容
{% endblock 块名 %}
错误:TemplateSyntaxError
解决方法:查看每个关键字间是否只有一个空格
7.html转义
使用safe过滤器关闭转义:<br/>
{{ content|safe }}
使用autoescape标签关闭html转义:<br/>
{% autoescape off %}
{{ content }}
{% endautoescape %}
模板硬编码默认不会经过转义:<br/>
{{ no_content|default:'<h2>硬编码</h2>' }}
8.csrf攻击(跨站请求伪造)
开启csrf防护,需要在post表单下加入以下代码才能避免自己的网站被屏蔽
{% csrf_token %}
其他没有包含csrfmiddlewaretoken标签的网页会返回403错误
8.1防御原理:
1)渲染模板文件时在页面生成一个名字为 csrfmiddlewaretoken 的隐藏域。
2)浏览器在访问服务器的时候,服务器会交给浏览器保存一个名字为csrftoken的cookie信息。
3)提交表单时,两个值都会发给服务器,服务器进行比对,如果一样,则csrf验证通过,否则返回403错误。
9.网址反向解析
需要在include中添加app name和namespace,一般情况是全部一样,
在需要反向解析的网址后面加入name指定后面需要反向解析的名字,
在模板文件中需要加入{% url 'booktest:index' %}代码,在应用的urls中配置是指定name;
url(r'^', include(('booktest.urls', 'booktest'), namespace='booktest')),
url(r'^index3$', views.index, name='index'),
{% url 'booktest:index' %}