自动化测试平台搭建系列(9)——Django框架中的模板models


本篇练习代码(gitee)

概念

模板层的作用:用于渲染向用户呈现的信息
Django的模板配置在settings.py文件内

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates']
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

BACKEND:
通过指定模板引擎类去实现Django的模板
DIRS:
定义了一个文件夹的列表,用于引擎查找模板的源文件
APP_DIRS:
在安装的APP里面查找模板引擎
OPTIONS:
包涵一些特殊的设置

方法的使用

首先我在templates下新建一个HTML模板,起名index
在这里插入图片描述
在这里插入图片描述

我想要的结果是,只要访问users就会进到首页上来了
接下来配置一下视图和路由
首先看users的视图:
想要返回首页首先要在视图里面定义一个首页视图函数index
这里需要return 一个render()函数
render里面第一个参数需要先写一个request,接下来就直接写HTML的页面文件名

def index(request):
    return render(request, 'index.html')

上一篇看过render的底层代码,其中有一个content
在这里插入图片描述
content后面这个loader其实就是模板引擎的加载器
loader里面有两个函数去加载模板,即:get_template() 和 select_template()
可以通过render_to_string的底层代码查看
在这里插入图片描述
在这里插入图片描述
get_template() 和 select_template()这两个函数是if,else的关系,即二选一
模板就是用这两个动作来进行加载的

模板语法

接下来看下怎么做模板渲染
还是拿我的首页举例,如果我想把一些信息渲染到我的首页该怎么处理?
这里会涉及到变量{{variable}}
然后看下它是怎么传变量的
刚才在视图里已经定义了我的首页(index)了,接下来就是首页的内容了。
假设我想把用户名(暂定admin)和当前时间传到首页上面
还得回来看下render的函数定义

def render(request, template_name, context=None, content_type=None, status=None, using=None):

context就是我读的上下文
也就是所有要渲染的数据都要放在context里面,context里面默认放的是字典
用实际的例子看下视图里的context的写法

def index(request):
    name = 'admin'
    dtime = datetime.now()
    return render(request, 'index.html', context={'name': name, 'dtime': dtime})

这里我已经有了两个值(name和dtime),然后用context把这两个值渲染到index里面去
然后再去看页面如何去接这两个值,那就得去修改index.html了
这两个值写在body里
在这里插入图片描述

然后就是去配置users的路由部分,path里面的这个name可写可不写

from django.urls import path

from users.views import index

app_name = 'users'
urlpatterns = [
    path('', index, name='users_index')
]

然后就是启动项目运行
在这里插入图片描述
context能接收的类型:
str、int、float、list、tuple、dict、set、object(自定义类型)
接下来再来个访问量(int)
定义num=100
评分(float)
定义score=8.8
在这里插入图片描述
在这里插入图片描述

执行结果如下:
在这里插入图片描述
接下来看下列表怎么拿到
举个例子:
喜欢的电影
movies = [‘孙悟空大战蜘蛛人’,‘动物世界’,‘怪兽灭掉小日本’,‘战狼’]

def index(request):
    name = 'admin'
    dtime = datetime.now()
    movies = ['孙悟空大战蜘蛛人','动物世界','怪兽灭掉小日本','战狼']
    # return render(request, 'index.html', context={'name': name, 'dtime': dtime})
    return render(request, 'index.html', context={'name': name, 'dtime': dtime, 'num': 100, 'score': 8.8, 'movies':movies})

在这里插入图片描述
这样写也可以
只是展示的时候是一行展示的
如下:
在这里插入图片描述
如果想把他一行一行分开展示,这里需要用到循环遍历了
另外如果只想取出列表中的某一个电影需要这样写{{movies.count}}其中count是一个具体的数字,类似于切片里的[count]
比如我喜欢的电影是战狼那就需要写成{{movies.3}},也是从0开始数的
在这里插入图片描述
在这里插入图片描述
如果想注释HTML里的某一段需要用{# 注释的部分 #}
在这里插入图片描述
好了,接着说正题,走循环!
在这里for循环和之前python3的for循环用法一样一样的
就是格式不太一样需要把for循环写到{% %}里面,反正HTML的写法有点别扭,慢慢适应吧,后面我还是考虑再单独写一篇关于HTML语法得博客,待我研究研究后面再写,这里先这样用着!!!
for循环就这么个写法,先照葫芦画瓢,后面再写个前端的专栏解释吧

<ul>
{% for movie in movies %}
    <li>{{ movie }}</li>
{% endfor %}
</ul>

然后结果就漂亮了。。。
在这里插入图片描述
接下来还有字典类型dict
拿明星举例
在这里插入图片描述
这里取字典里的值的时候需要使用{{字典名.key}}来获取
在这里插入图片描述
结果:
在这里插入图片描述

最后看下自定义的类如何传的
先在视图文件里创建一个类

# -*- coding:utf-8 -*-
from datetime import datetime

from django.http import HttpResponse
from django.shortcuts import render


# Create your views here.
# 自定义的一个类
class Movie:
    # 初始化一下
    def __init__(self, name, director):
        self.name = name
        self.director = director

    def __str__(self):
        return self.name


def index(request):
    name = 'admin'
    dtime = datetime.now()
    movies = ['孙悟空大战蜘蛛人', '动物世界', '怪兽灭掉小日本', '战狼']
    stars = {'boys': '张继科', 'girls': '乔碧罗'}
    # 自定义的类(电影名称,导演)
    movieobj = Movie('战狼', '吴京')
    # return render(request, 'index.html', context={'name': name, 'dtime': dtime})
    return render(request, 'index.html',
                  context={'name': name, 'dtime': dtime,
                           'num': 100, 'score': 8.8,
                           'movies': movies,
                           'stars': stars,
                           'movieobj': movieobj})

在这里插入图片描述
这里取电影的名字就用{{类名.要取的东西}}
执行结果:
在这里插入图片描述

模板过滤

这里我简单说一下过滤器,其实我理解的过滤器就跟python基础里面的函数类型有点类似
这里常用到的过滤器类型有以下几个
lower、upper、title、capitalize、safe、length、default(默认值)、floatformat(浮点型的格式化)、random
使用过滤器的方法格式:{{变量名|过滤器}}
这么写可能有点不太清楚,下面先拿lower做个举例就知道了
这里我重新在视图里定义一个函数mytest

def mytest(request):
    # 过滤器:lower、upper、title、capitalize、safe、length、default(默认值)、floatformat(浮点型的格式化)、random
    msg = 'THIS is a messages'
    return render(request, 'mytest.html', context={'msg':msg})

新建一个HTML模板,起名也叫mytest(主要是做个区分,名字不重要)
在这里插入图片描述
路由别忘了加上
在这里插入图片描述

lower其实就是把大写字母变成小写字母
这里我定义了msg里面有大写字母THIS
看下运行结果:
在这里插入图片描述
其他几个用法也是一样的
在这里插入图片描述

在这里插入图片描述
还有个floatformat(浮点型的格式化)
比如说我给一个数字num=12.333
{{num | floatformat:2}}
这就代表保留两位小数

接下来还有random,
比如上面的电影movies
{{ movies | random }}
随机电影
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后还有一个切片slice
用法:{{ movies | slice:2 }}

在这里插入图片描述
大体总结一下:
在这里插入图片描述

模板标签tags

像这种的就是标签{% tag %}
放在大括号百分号里面的叫标签
看下tag的类型
上面那个for循环的for就是其中的一个
除了for还有if、elseif、block、extends、autoescape
{% autoescape off%} … {% endautoescape %}
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十七光年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值