标签是Django模板的重要构成部分,它可以在输出中创建文本,或通过循环或逻辑控制流程。
{% for %}标签:循环遍历列表/数据对象中的每个项目
定义视图:
def template_for(request): userlist=[{"name":"张三","age":17,"addtime":"2018-9-1"}, {"name":"李四","age":18,"addtime":"2018-9-2"}, {"name":"王五","age":19,"addtime":"2018-9-3"}] return render(request,"template_for.html",{"ulist":userlist})
定义模板:
<ul> {% for item in ulist %} <li>{{item.name}}-{{item.age}}-{{item.addtime}}</li> {% endfor %} </ul>
{% if %}标签:条件判断
定义模板:
<ul> {% for item in ulist %} <li> {%if forloop.first%} <p>这是第一个元素</p> {%elif forloop.last%} <p>这是最后一个元素</p> {%endif%} {{item.name}}-{{item.age}}-{{item.addtime}} </li> {% endfor %} </ul>
{% csrf_token %}标签:生成csrf_token标签,防止跨站请求攻击
{%csrf_token%}为单标签,即不需要有对应的结束标签。
跨站请求伪造(Cross Site Request Forgery,CSRF)是伪造客户端请求的一种攻击,即攻击者盗用某人身份,以其名义发送恶意请求。CSRF能够做的事情包括:以某人名义发送邮件、发消息、盗取账号等。
默认情况下,当使用django-admin startproject 命令创建工程时,CSRF防御机制就已经开启了。如果没有开启,可以在MIDDLEWARE设置中添加“django.middleware.csrf.CsrfViewMiddlewar”。
定义表单模板(使用{%csrf_token%}):
<form action="/user/login/" method="post"> {% csrf_token %} <p>用户名:<input type="text" name="username"></p> <p>密码:<input type="password" name="pswd"></p> <p><input type="reset"> <input type="submit"></p> </form>
定义视图:
def login(request): if request.method=="GET": return render(request,"template_csrf.html") elif request.method=="POST": name=request.POST.get("username") pswd=request.POST.get("pswd") return HttpResponse("<h1>OK!<h1>")
{% include %}标签:模板中包含其它模板内容
{%include%}标签允许在模板中包含其它模板的内容。标签的主要参数是所要包含的模板的名称,可以是一个变量或常量。当在多个页面中使用相同的代码时,可以考虑使用{%include%}标签。