三.URL路由及模板渲染方式
1.模板路径
1.模板是什么?
Django自带的模板语言= HTML代码+逻辑控制代码,注意 模板 != HTML,模块 =HTML代码+逻辑控制代码(特殊标记);
2.为什么用模板
1、对页面设计进行的任何改变都必须对 Python 代码进行相应的修改,牵一发而动全身;
2、Python 代码编写和 HTML 设计是两项不同的工作,前端开发和后端开发无非 并行;
基于这些原因,将HTML页面的设计和后端逻辑设计分离,会更简洁、容易维护开发我们的WEB应用。 我们可以使用 Django的 模板系统 (Template System)来实现这种模式.
3.模板作用?
在server端 把后端的变量 嵌入到HTML中渲染后,返回给浏览器来达到前后端代码分离,页面动态显示的目的;
1.1 模板配置
1. 在配置文件setting.py中找到TEMPLATES设置来配置。
这是一个设置选项的列表,模板大都包含两项通用设置;两种方式配置模板:
2.第一种: DIRS 定义一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件。将templates放在主项目目录下.
3.第二种: APP_DIRS告诉模板引擎是否应该进入每个已安装的应用中查找模板,值为True则模板会去安装了的app下面的templates文件夹查找模板。。所以我们也可以在每个app的里面创建模板目录templates存放模板,这种方式需要将这个app添加到setting.py文件的INSTALLED_APPS列表中.
2.模板变量的使用规则
1.语法: {{ 变量名 }}
2.命名由字母和数字以及下划线组成,不能有空格和标点符号
3.可以使用字典、模型、方法、函数、列表
4.不要和python或django关键字重名
5.变量和查找。
注:
1.如果data是一个字典,那么访问data.items将会访问data这个字典的key名为items的值,而不会访问字典的items方法。
2.点在模板渲染时有特殊的含义。 变量名中点表示查找。
1.app 子项目名views.py文件
| 2./templates/子项目/index.html 文件 |
我们的项目:
1.先在项目文件的urls.py中设置子应用的url
urlpatterns = [
path('admin/', admin.site.urls),
#设置子应用的url, include 导入子项目.urls文件
path('', include('WDjangoLook_App01.urls'))
]
2.在子应用的views文件中设设置显示函数
def hello():
return "django"
class Fruits:
def __init__(self,name,color):
self.name = name
self.color = color
def say (self):
return "hahaha"
ap = Fruits('apple','red')
ls = ['s','y']
dc = {'a': 1, 'b':2}
def Look(request):
name = '大明'
name1 = '小明'
context ={
'name':name,
'name1':name1, #字符串
'hello':hello, #函数
'fruits_say': ap.say, #方法
'fruits':ap, #类对象
'list':ls , # 列表
'dict':dc #字典
}
return render(request,'index.html',context)
3.在子应用的urls.py中设置显示函数的url
from django.urls import path,re_path
from .import views
urlpatterns = [
# index/ --- 子域的url views.index -- 调用index函数 name = '' -- 给函数起个别名
path('index/', views.index, name = 'index'),
#转换器后面比必须有参数,否则识别不出来 参数为 --- int:参数
path('index_path/<int:aa>/',views.index_path, name = 'index_name'),
# 遵守 ^ 严格的开始,$ 严格的结尾
re_path('^index_re_path/$',views.index_re_path,name = 'index_name'),
#(?P<yy>[09]+) --- 0-9 个任意数字
re_path('^re_path/(?P<yy>[09]+)/$',views.test),
re_path('^look/$',views.Look)
]
4.在模板中设置HTML
<a href="#">{{name}}在吗?</a><br>
<a href="#">{{name1}}在</a><br>
这个变量是字符串对象:{{name1}}<br>
这个变量是函数对象:{{hello}}<br>
这个变量是类方法对象:{{fruits_say}}<br>
这个变量是类对象:{{fruits}}<br>
这个变量类对象,访问类对象属性:{{fruits.name}}<br>
这个变量类对象,访问类对象方法:{{fruits.say}}<br>
这个变量列表对象:{{list}}<br>
这个变量是列表对象,访问列表的元素:{{list.1}}<br>
这个变量是字典对象:{{dict}}<br>
这个变量是字典对象,访问字典的键:{{dict.a}}<br>
5.运行结果(如果没有反应,记得上传到虚拟机)
进入到服务器
进入到路由
3.过滤器(详解)
作用: 对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量展示出来。
语法:{{fruits|lower}}
管道符号进行链式调用,比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写。
语法:{{fruits|lower|capfirst}}
使用参数:过滤器可以使用参数,在过滤器名称后面使用冒号”:”再加上参数,比如要把一个字符串中所有的空格去掉,则可以使用cut过滤器,
语法如下: {{fruits|cut:" "}}
注意:
使用参数的时候,冒号和参数之间不能有任何空格,一定要紧挨着
3.1常用过滤器
3.2time和date的过滤器格式
具体实现与模板使用规则一致(仅仅语法为过滤器)
1.先在项目文件的urls.py中设置子应用的url
2.在子应用的views文件中设设置显示函数
def index5(request):
test = 'THIS IS A LIST...'
context = {
'test': test,
'xx': '',
'numl': 1,
'num2': 2,
'list': ls,
'html': '<h1>hello django!!!</h1>',
'now': datetime.datetime.now,
'float': 3.1415
}
return render(request,'过滤器.html',context)
3.在子应用的urls.py中设置显示函数的url
re_path('^index5/$',views.index5)
4.在模板中设置HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
这是没做处理的变量{{test}}<br>
这是设置默认值的变量{{xx|default:'dddddddddd'}}<br>
这是设置只有None时才使用的默认变量{{xx|default_if_none:'dddddddddd'}}<br>
这是变为小写后的变量{{test|lower}}<br>
这是变为小写再将首字母变成大写变量{{test|lower|capfirst}}<br>
这是两个数字相加的变量{{num1|add:num2}}<br>
这是两个字符串相加的变量{{test|add:xx}}<br>
</body>
</html>
运行程序的结果: