第三百一十节,Django框架,模板语言
模板语言就是可以将动态数据在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',
)