三.URL路由及模板渲染方式 2021-02-24

三.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>

运行程序的结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值