模板语言就是可以将动态数据在html模板渲染的语言
一、接收值渲染
locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到html用模板语言渲染
{{...}}接收一个变量或者值进行渲染
逻辑处理
from django.shortcuts import render from app1.models import * #导入数据库操作模块 #逻辑处理模块 def special(request): a = ‘叫卖录音网‘ return render(request, ‘index.html‘, locals()) # 打开页面
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>{{ a }}</h1> </body> </html>
二、接收值,运行代码块
for循环
{% for item in item_list %}
<a>{{ item }}</a>
forloop.counter 计数器,记录循环次数
forloop.first 判断是否是循环第一次,返回布尔值
forloop.last 判断是否是循环最后一次,返回布尔值
{% endfor %}
逻辑处理
from django.shortcuts import render from app1.models import * #导入数据库操作模块 #逻辑处理模块 def special(request): a = [‘首页‘,‘产品展示‘,‘关于我们‘] return render(request, ‘index.html‘, locals()) # 打开页面
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> {% for i in a %} <li>{{ i }}</li> {{ forloop.counter }} {{ forloop.first }} {{ forloop.last }} {% endfor %} </ul> </body> </html>
if判断
{% if ordered_warranty %}
{% else %}
{% endif %}
逻辑处理
from django.shortcuts import render from app1.models import * #导入数据库操作模块 #逻辑处理模块 def special(request): a = [‘首页‘,‘产品展示‘,‘关于我们‘] return render(request, ‘index.html‘, locals()) # 打开页面
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> {% for i in a %} {% if i == ‘首页‘ %} <li style="color: #ee1215">{{ i }}</li> {% elif i == ‘产品展示‘ %} <li style="color: #1b47ee">{{ i }}</li> {% else %} <li>{{ i }}</li> {% endif %} {% endfor %} </ul> </body> </html>
三、母板-子板-母板继承
母板继承就是访问的页面继承一个母板,将访问页面的内容引入到母板里指定的地方,组合成一个新页面返回给浏览器
一般母板里都是写的一个网页里不变的地方,也就是通用的地方,被继承页(访问页)都是每个页面不同的地方,也就是将页面不同的地方引入到母板组合成一个新页面返回浏览器
母板里一般都是网页的、头部、底部、头部底部css、头部底部js
被继承页(访问页)里一般都是新内容,新内容的css和js
母板:{% block title %} {% endblock %} 设置可调用区块或,有参设置可调用区块,无参调用区块
子板:{% extends "base.html" %} 子板继承母板
{% block title %} {% endblock %} 设置可调用区块或,有参设置可调用区块,无参调用区块
逻辑处理
from django.shortcuts import render from app1.models import * #导入数据库操作模块 #逻辑处理模块 def special(request): return render(request, ‘index.html‘, locals()) # 打开页面
母板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" type="text/css" href="/static/css/tou.css"> {% block css %}{% endblock %} #调用子板的css样式 </head> <body> <div id="tou">头部</div> {% block nei_rong %}{% endblock %} #调用子板的内容区块 <div id="wei">尾部</div> </body> </html>
子板(访问页)
{% extends "tou.html" %} #继承母板 {% block css %} #设置母版调用css样式区块 <link rel="stylesheet" type="text/css" href="/static/css/index.css"> {% endblock %} {% block nei_rong %} #设置母版调用字板内容区块 <div id="neir">内容</div> {% endblock %}
四、帮助方法:
{{ item.event_start|date:"Y-m-d H:i:s"}} 格式化时间
{{ bio|truncatewords:"30" }} 只显示指定字数
{{ my_list|first|upper }} 首字母大写
{{ name|lower }} 首字母小写
五、自定义html模板可调用函数模块
a、在app应用中创建templatetags目录
b、在目录中创建任意 .py 文件,如:xx.py
在py文件里设置html可调用函数,注意py文件里有几个注意点如下:
#!/usr/bin/env python # coding:utf-8 from django import template #必须导入这个模块 from django.utils.safestring import mark_safe #必须导入这个模块 register = template.Library() #固定格式必须设置这个变量 @register.simple_tag #自定义函数必须用上这个装饰器,html页面才可以调用 def my_simple_time(v1, v2, v3): #自定义函数 return v1 + v2 + v3 @register.simple_tag def my_input(id, arg): result = "<input type=‘text‘ id=‘%s‘ class=‘%s‘ />" % (id, arg,) return mark_safe(result)
c、在使用自定义函数的html文件中导入自定义函数模块 xx.py 文件名
{% load 自定义函数模块名称 %}
d、html页面使用
{% 函数名称 参数 参数 参数 %}
{% load mbanyuyan %} #导入自定义函数模块 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% my_simple_time 1 2 3 %} #传参并且执行自定义函数 </body> </html>
注意:使用自定义html函数,必须在全局配置文件settings.py里的INSTALLED_APPS注册了app应用
INSTALLED_APPS = ( ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘app01‘, )