模板语法
模板语法:
- 静态页面:页面的数据都是写死的,万年不变的
- 动态页面:页面上的数据时从后端动态获取的
变量渲染之深度查询:
views.py文件
def index(request):
name="闫闻"
age=28
is_mar="否"
book_list=["西游记","水浒传","红楼梦","三国演义"]
info_dir={"name":"zz","age":26}
class Book(object):
def __init__(self,title,price):
self.title=title
self.price=price
book=Book("英雄本色","100")
book01 = Book("阿Q正传", "321")
book02 = Book("咖啡馆", "23")
book03 = Book("菜鸡", "4321")
book04 = Book("运维", "3424213")
BooK_dir=[book01,book02,book03,book04]
return render(request,"index.html",locals())
index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>深度查询</h2>
<p>姓名:{{ name }}</p>
<p>年龄:{{ age }}</p>
<p>婚否:{{ is_mar }}</p>
<p>中国的四大名著:{{ book_list }}</p>
<p>第一本:{{ book_list.0 }}</p>
<p>第二本:{{ book_list.1 }}</p>
<p>第三本:{{ book_list.2 }}</p>
<p>第四本:{{ book_list.3 }}</p>
<p>我有个小伙伴,名字{{ info_dir.name }},年龄{{ info_dir.age }}</p>
<p>读过的书:{{ book.title }}...............价格:{{ book.price }}</p>
<p>第一本:{{ BooK_dir.0.title }}</p>
<p>第二本:{{ BooK_dir.1.title }}</p>
<p>第三本:{{ BooK_dir.2.title }}</p>
<p>第四本:{{ BooK_dir.3.title }}</p>
</body>
</html>
内置过滤器:
views.py文件
from django.shortcuts import render
import datetime
# Create your views here.
def neizhi(request):
book_dir = ["西游记", "水浒传", "三国演义", "红楼梦"]
msg = '<a href="www.baidu.com">百度</a>'
info="aAabBbcCc"
now_time=datetime.datetime.now()
message="hello world ,I am Chinese"
file_size= 4342354235
list=['a','b','c','d']
return render(request, "neizhi.html", locals())
neizhi.htm文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>内置过滤器</p>
<p>book_dir最后一本书籍是:{{ book_dir|last }}</p>
<p>book_dir第一本书籍是:{{ book_dir|first }}</p>
<p>book_dir总共有{{ book_dir|length }}本书籍</p>
<p>book_dir_list默认值:{{ book_dir_list|default:"暂无书籍" }}</p>
<p>{{ msg }}</p>
<p>{{ msg|safe }}</p>
<p>字母转化大写:{{ info|upper }}</p>
<p>字母转化小写:{{ info|lower }}</p>
<p>首字母转化大写:{{ info|title }}</p>
<p>时间:{{ now_time }}</p>
<p>当前时间:{{ now_time|date:"Y-m-d H-i-s" }}</p>
<p>截取文件内容:{{ message|cut:"hello" }}</p>
<p>文件大小:{{ file_size|filesizeformat }}</p>
<p>拼接列表:{{list| join:"-"}}</p>
<P>随机提取:{{ list|random }}</P>
<P>按字符长度截取内容:{{ message|truncatechars:10 }}</P>
<p>按单词长度截取内容:{{ message|truncatewords:3 }}</p>
<p>切片:{{message | slice:"-7:"}}</p>
</body>
</html>
自定义过滤器:
示例:输入手机号13718987777-->137****7777,这时需要自定义过滤器
要声明自定义过滤器并且能在末班中正常使用,需要完成2个前置工作
注意事项:
1.需要配置setting文件,在INSTALLED_APPS中注册
2.在home子应用下创建“templatetags包”,在包目录创建py文件
3.需要在模板顶部使用load标签加载自定义过滤器文件
"""
{% load my_filters %}
"""
1、当前使用和声明过滤器的子应用必须在setting.py配置文件中的INSTALLED_APPS中注册了!!!:
"""settings.py"""
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app04.apps.App04Config'
]
2、在home子应用下创建templatetags包[必须包含__init__.py], 在包目录下创建任意py文件:
store/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app04.apps.App04Config'
]
store/urls.py
from django.contrib import admin
from django.urls import path,register_converter,include
urlpatterns = [
path("app04/",include("app04.urls"))
]
app04/urls.py
from django.urls import path
from app04.views import custom
urlpatterns = [
path("custom/",custom)
]
app04/views.py
from django.shortcuts import render,HttpResponse
# Create your views here.
def custom(request):
tel="13718987777"
return render(request, "custom.html", locals())
app04/templatetags/my_setting.py
from django import template
register = template.Library()
@register.filter("mobile")
def mobile(content):
return content[:3]+"*****"+content[-4:]
store/templates/custom.html
{% load my_setting %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ tel| mobile }}
</body>
</html>
标签:
if标签:
app05/views.py
from django.shortcuts import render
# Create your views here.
def chage(request):
score = 100
return render(request,"chage.html",locals())
templates/chage.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
成绩: {{ score }}
{% if score > 90 %}
<span>优秀</span>
{% elif score > 60 %}
<span>及格</span>
{% else %}
<span>不及格</span>
{% endif %}
</div>
</body>
</html>
for标签:
属性 | 描述 |
---|---|
forloop.counter | 显示循环的次数,从1开始 |
forloop.counter0 | 显示循环的次数,从0开始 |
forloop.revcounter0 | 倒数显示循环的次数,从0开始 |
forloop.revcounter | 倒数显示循环的次数,从1开始 |
forloop.first | 判断如果本次是循环的第一次,则结果为True |
forloop.last | 判断如果本次是循环的最后一次,则结果为True |
forloop.parentloop | 在嵌套循环中,指向当前循环的上级循环 |
app06/views.py
from django.shortcuts import render
# Create your views here.
def fortest(request):
book_list=["西游记","水浒传","红楼梦","三国演义"]
book_list1 = [
{"id": 11, "name": "python基础入门", "price": 130.00},
{"id": 17, "name": "Go基础入门", "price": 230.00},
{"id": 23, "name": "PHP基础入门", "price": 330.00},
{"id": 44, "name": "Java基础入门", "price": 730.00},
{"id": 51, "name": "C++基础入门", "price": 300.00},
{"id": 56, "name": "C#基础入门", "price": 100.00},
{"id": 57, "name": "前端基础入门", "price": 380.00},
]
return render(request, 'fortest.html', locals())
templates/fortest.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table width="800" align="center" border="1">
<tr>
<td>序号</td>
<td>id</td>
<td>标题</td>
<td>价格</td>
</tr>
{# {% for book in book_list1 %}#}
{# <tr>#}
{# <td>{{ book.id }}</td>#}
{# <td>{{ book.name }}</td>#}
{# <td>{{ book.price }}</td>#}
{# </tr>#}
{# {% endfor %}#}
{# 建议不要直接使用for循环一维字典,此处使用仅仅展示for嵌套for而已 #}
{# {% for book in book_list1 %}#}
{# <tr>#}
{# {% for field,value in book.items %}#}
{# <td>{{ field }} == {{ value }}</td>#}
{# {% endfor %}#}
{# </tr>#}
{# {% endfor %}#}
{# {% for book in book_list1 %}#}
{# <tr>#}
{# <td>{{ book.id }}</td>#}
{# <td>{{ book.name }}</td>#}
{# {% if book.price > 200 %}#}
{# <td bgcolor="#ff7f50">{{ book.price }}</td>#}
{# {% else %}#}
{# <td>{{ book.price }}</td>#}
{# {% endif %}#}
{# </tr>#}
{# {% endfor %}#}
{# 逆向循环数据 #}
{# {% for book in book_list1 reversed %}#}
{# <tr>#}
{# <td>{{ book.id }}</td>#}
{# <td>{{ book.name }}</td>#}
{# {% if book.price > 200 %}#}
{# <td bgcolor="#ff7f50">{{ book.price }}</td>#}
{# {% else %}#}
{# <td>{{ book.price }}</td>#}
{# {% endif %}#}
{# </tr>#}
{# {% endfor %}#}
{% for book in book_list1 %}
<tr>
<td>{{ forloop.counter }}</td>
{# <td>{{ forloop.counter0 }}</td>#}
{# <td>{{ forloop.revcounter }}</td>#}
{# <td>{{ forloop.revcounter0 }}</td>#}
{# <td>{{ forloop.first }}</td>#}
{# <td>{{ forloop.last }}</td>#}
<td>{{ book.id }}</td>
<td>{{ book.name }}</td>
{% if book.price > 200 %}
<td bgcolor="#ff7f50">{{ book.price }}</td>
{% else %}
<td>{{ book.price }}</td>
{% endif %}
</tr>
{% endfor %}
</table>
</body>
</html>
</body>
</html>
模板嵌套继承:
语法:
{% include "模板文件名"%} # 模板嵌入
{% extends "base.html" %} # 模板继承
模板嵌套继承---include:
可以将重复代码进行分类存放,那边用到就在哪里引用
templates/order.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>hhhhhhhhhhhhhhhhhhhhhhhhhhhh</h1>
{% include "ad.html" %}
</body>
templates/ad.html
<style>
.advertise{
width: 200px;
height: 100px;
background-color: orange;
position: fixed;
bottom: 10px;
right: 10px;
}
</style>
<div class="advertise">广告</div>
模板嵌套继承---extends:
app07/views.py(基础模块)
from django.shortcuts import render
# Create your views here.
def order(request):
return render(request,"order.html")
templates/basis.html(基础模块)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% block content %}
<h1>1111111111111111111</h1>
{% endblock %}
{% block mes %}
<h1>22222222222222222</h1>
{% endblock %}
<style>
.advertise{
width: 200px;
height: 100px;
background-color: orange;
position: fixed;
bottom: 10px;
right: 10px;
}
</style>
<div class="advertise">广告</div>
</body>
templates/order.html(修改引用基础模块)
{% extends 'basis.html' %}
{% block content %}
{#保留原有数据#}
{{ block.super }}
<h3>修改原有数据</h3>
{% endblock %}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了