django模板

模板

  • 概述
    • 模板由两部分组成
      • HTML代码
      • 逻辑控制代码
    • 作用
      • 快速生成HTML页面
    • 优点
      • 模板的设计实现了业务逻辑与现实内容的分离
      • 视图可以使用任何模板
      • 模板处理加载渲染

定义模板

  • 变量
    • 视图传递给模板的数据
    • 要遵守标识符规则
  • 语法
    • {{ var }}
  • 注意
    • 如果使用的变量不存在,则插入的是空字符串
    • 在模板中使用点语法
    • 字典查询
    • 属性或者方法
    • 数字索引
    • 在模板中调用对象的方法不能传递参数
  • 标签
    • 语法 {% tag %}
      • 作用是在输出中创建文本控制逻辑和循环
{% if 表达式 %}
语句
{% endif %}
{% if 表达式1 %}
语句1
{% else%}
语句2
{% endif %}
{% if 表达式1 %}
语句1
{% elif 表达式2 %}
语句2
……
{% elif 表达式n %}
语句n
{% else %}
语句e
{% endif %}

示例
{% if num %}
    <h1>sunck is a nice man</h1>
{% endif %}
	
for
格式
{% for  变量  in  列表 %}
    语句
{% endfor %}
{% for  变量  in  列表 %}
    语句1
{% empty %}
    语句2
{% endfor %}
注意
列表为空或者列表不存在时执行语句2

{{ forloop.counter }}
表示当前是第几次循环
示例
<ul>
{% for stu in studentss %}
    <li>
        {{forloop.counter}}--{{stu.sname}}--{{stu.sgrade}}
    </li>
{% empty %}
    <li>目前没有学生</li>
{% endfor %}
</ul>
注释
{# 注释 #}
注释多行

{% comment %}
注释
注释
{% endcomment %}
url
作用反向解析
格式{% url 'namespace:name'  p1  p2 %}
反向解析
	url(r'^', include('myApp.urls', namespace="app"))
	url(r'^good/(\d+)/$', views.good, name="good"),
	<a href="{% url 'app:good' 1 %}">链接</a>
	
csrf_token
作用用于跨站请求伪造保护
格式{% csrf_token %}

block、extends
作用用于模板的继承

autoescape
作用用于HTML转义
	
	

过滤器
语法{{ var|过滤器 }}
作用在变量被显示前修改它
lower
upper
<h1>{{str|upper}}</h1>
<h1>{{str|lower}}</h1>
			
过滤器可以传递参数,参数用引号引起来
join
	格式
		列表|join:‘#’
h1>{{list|join:'#'}}</h1>

如果一个变量没有被提供,或者值为false、空,可以使用默认值
default
	格式
		{{ var|default:'good'}}
	示例
		<h1>{{test|default:'没有'}}</h1>
			
根据给定格式转换日期为字符串
date
	格式
		{{ dateVal|date:'y-m-d'}}

加减乘除
<h1>num = {{num}}</h1>
<h1>{{num|add:10}}</h1>
<h1>{{num|add:-5}}</h1>
<!--num/1*5-->
<!--num * 5-->
<h1>{% widthratio num 1 5 %}</h1>
<!--num / 5-->
<h1>{% widthratio num 5 1 %}</h1>

模板继承

  • 作用
    • 模板继承可以减少页面的内容的重复定义,实现页面的重用
    • block标签
      • 在父模板中预留区域,子模板去填充
      • 语法{% block 标签名 %} {%endblock 标签名%}
    • extends标签
      • 继承模板,需要写在模板文件的第一行
      • 语法{% extends '父模板路径' %}
  • 定义父模板
	
				<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #header{
            width:100%;
            height:100px;
            background-color:red;
        }
        #footer{
            width:100%;
            height:100px;
            background-color:blue;
        }
    </style>
</head>
<body>
    <div id="header">header</div>

    <div id="main">
        {% block main%}

        {% endblock main%}
        <hr/>
        {% block main2%}

        {% endblock main2%}
    </div>

    <div id="footer">header</div>
</body>
</html>
  • 定义子模板

{% extends 'myApp/base.html'%}

{% block main %}
    <h1>获得id= main的css属性</h1>
{% endblock main %}

{% block main2 %}
    <h1>获得id= main的css属性</h1>
{% endblock main2 %}

HTML转义
	return render(request,'myApp/index.html',{"code":"<h1>sunck is a very good man</h1>"})
	
{{code}}
		将接收到的code当成普通字符串渲染
		将接收到的字符串当成HTML代码渲染
			{{code|safe}}
			{% autoescape off %}
{{code}}

{% endautoescape %}
	CSRF
		跨站请求伪造
			某些恶意网站包含链接、表单、按钮、js,利用登陆用户在浏览器中认证,从而攻击服务
		防止CSRF
			在settings.py文件中的MIDDLEWARE增加'django.middleware.csrf.CsrfViewMiddleware',
{% csrf_token %}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值