Django 模版语法 测试环境 ORM单表查询
模版语法
传值
视图函数向前端html页面传值,基本上所有的数据类型都可以渲染在前端页面上。
views.py
from django.shortcuts import render, redirect, HttpResponse
# Create your views here.
def index(request):
int_1 = 123
str_2 = '测试'
list_3 = [1, 2, 3]
dict_4 = {'a': 1, 'b': 2}
set_5 = {1, 2, 3, 4, 5}
tuple_6 = (1, 2, 3,)
float_7 = 3.1415926
bool_8 = True
return render(request, 'index.html', locals())
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<p>{{ int_1 }}</p>
<p>{{ str_2 }}</p>
<p>{{ list_3 }}</p>
<p>{{ dict_4 }}</p>
<p>{{ set_5 }}</p>
<p>{{ tuple_6 }}</p>
<p>{{ float_7 }}</p>
<p>{{ bool_8 }}</p>
</body>
</html>

但是需要注意的是函数的渲染,如果在html页面渲染函数的话,不需要加括号就会会直接执行该函数,如果有返回值就会在页面显示返回值,没有返回值会显示None。类里面的函数也可以调用,但是也不要加括号,和flask模版语法不一样。
模版取值直接用点语法。
过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符
{{ 变量名 | 过滤器:可选参数 }}
length
返回对象的长度,适用于字符串和列表。
字典返回的是键值对的数量,集合返回的是去重后的长度。
def index(request):
name = 'isable'
return render(request, 'index.html', locals())
{# html页面 #}
{{ name|length }}
{# 输出长度结果 #}
date
根据给定格式对一个日期变量进行格式化。
格式 Y-m-d H:i:s返回 年-月-日 小时:分钟:秒 的格式时间。
import datetime
def index(request):
ctime = datetime.datetime.now()
print(ctime)
return render(request, 'index.html', locals())
{{ ctime|date:'Y-m-d H:i:s' }}
filesizeformat
以更易读的方式显示文件的大小(即'13 KB', '4.1 MB', '102 bytes'等)。
字典返回的是键值对的数量,集合返回的是去重后的长度。
def index(request):
file_size = 102900291913
return render(request, 'index.html', locals())
{{ file_size|filesizeformat }}
seaf
将字符串标记为安全,不需要转义。
要保证 views.py 传过来的数据绝对安全,才能用 safe。
和后端 views.py 的 mark_safe 效果相同。
为了防止XSS攻击,Django 会自动对 views.py 传到HTML文件中的标签语法进行转义,令其语义失效,在前端渲染成文本。加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效。
from django.shortcuts import renderdef index(request): views_str = "<script>alert(111)</script>" return render(request, "index.html", {"views_str": views_str})
{{ views_str|safe }}
标签
for标签
与python中for循环语句类似每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。
def index(request): l1 = [1, 2, 4, 5, 6] return render(request, 'index.html', locals())
{% for foo in l1 %} <p>{{ foo }}</p>{% endfor %}
在 {% for %} 标签里可以通过 {{forloop}} 变量获取循环序号。
- forloop.counter: 顺序获取循环序号,从 1 开始计算
- forloop.counter0: 顺序获取循环序号,从 0 开始计算
- forloop.revcounter: 倒叙获取循环序号,结尾序号为 1
- forloop.revcounter0: 倒叙获取循环序号,结尾序号为 0
- forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False
- forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False
继承
模板可以用继承的方式来实现复用,减少冗余内容。
网页的头部和尾部内容一般都是一致的,我们就可以通过模板继承来实现复用。
父模板用于放置可重复利用的内容,子模板继承父模板的内容,并放置自己的内容。
# 父模板 给子模版需要更改的地方括起来 做标记{% block content_name %} # 需要更改的内容 {% endblock %}
# 子模板{% entends 'home.html' %} #继承父模板内容{% block content_name %} # 子模版内容{% endblock %}
Django测试环境的搭建
将manage.py文件里面的以下代码复制到app文件里面的tests.py:
import osimport sysif __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoProject02.settings") import django django.setup
需要注意的是 导入其他py文件的时候需要在django.setup()下面写。这时候就直接可以右键运行。
ORM单表中查询的方法
values
# 字段查询res = modes.User.objects.values('name', 'age')# 列表套字典
values_list
# 字段查询,与values用法一致# 返回值是列表套元组
去重
# 去重不要带主键字段,否则去重就没意义models.User.objects.values('name').distinct()
排序
res = model.User.object.values('name', 'age').order_by('-age') # 默认是升序 给字段加上负号就是降序
reverse
res = modes.User.objects.order_by('age').reverse()# 倒序
count
# 统计出现次数res = models.User.objects.filter(name='egon').count()
Django 模版语法 测试环境 ORM单表查询的更多相关文章
- python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)
12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...
- ORM单表查询,跨表查询,分组查询
ORM单表查询,跨表查询,分组查询 单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models ...
- django之orm单表查询
这几天重新学习了一下django的orm,以此作为记录来分享. Part1:修改配置,生成表 在写数据和查数据之前,首先先得把django配置一下,具体配置如下: 1.先在公共项目的settings中 ...
- 54 Django 模型层(1) 单表查询
单表操作: 一 项目的操作顺序: 1 在model.py文件中创建表结构 class Book(models.Model): id=models.AutoField(primary_key=True) ...
- orm单表查询和模糊查询
一.单表查询 1. 返回queryset对象的查询 all() 以列表形式返回全部queryset对象 filter(**kwargs) 筛选 exclude(**kwargs) 排除 reverse ...
- Django ORM单表查询必会13条
必知必会13条 操作下面的操作之前,我们实现创建好了数据表,这里主要演示下面的操作,不再细讲创建准备过程 <1> all(): 查询所有结果 <2> filter(**kwar ...
- django框架基础-ORM单表操作-长期维护
############### 单表操作-添加数据 ################ import os if __name__ == '__main__': os.environ.set ...
- Django框架05 /orm单表操作
Django框架05 /orm单表操作 目录 Django框架05 /orm单表操作 1. orm使用流程 2. orm字段 3. orm参数 4. orm单表简单增/删/改 5. orm单表查询 5 ...
- mysql(单表查询,多表查询,MySQl创建用户和授权,可视化工具Navicat的使用)
单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT ...
随机推荐
- 《PHP扩展学习系列》系列分享专栏
<PHP扩展学习系列>系列分享专栏 <PHP扩展学习系列>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/20177 ...
- 《PHP安全编程系列》系列分享专栏
PHP安全编程系列收藏夹收藏了有关PHP安全编程方面的知识,对PHP安全编程提供学习参考 <PHP安全编程系列>已整理成PDF文档,点击可直接下载至本地查阅https://www.webf ...
- MySQL基础篇(一)
本文主要内容为MySQL的基础语句以及正则表达式等内容. 本文操作的数据库内容存在个人github:https://github.com/YuanGao-1/blog_demo.git init_sc ...
- python使用笔记28--unittest单元测试框架
单元测试:开发程序的人自己测试自己的代码 unittest自动化测试框架 1.单元测试 unittest框架,执行的顺序是按照方法名的字母来排序的 setUpClass方法是最开始执行的 tearDo ...
- [刘阳Java]_EasyUI环境搭建_第2讲
在EasyUI的第1讲中我们介绍了学习EasyUI能够做什么,这次我们得快速搭建一个EasyUI环境,来测试一下它的运行效果 1.jQuery EasyUI环境搭建 <script type=& ...
- fork、父进程和子进程
进程 什么是进程?进程是一个运行中的程序实体,拥有独立的堆栈.内存空间和逻辑控制流. 这是标准的进程概念.让我们通过操作系统的fork函数看看这个抽象的概念是怎么在进程的实现中体现出来的. 构成要素 ...
- 【剑指offer】55 - I. 二叉树的深度
剑指 Offer 55 - I. 二叉树的深度 知识点:二叉树,递归 题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树 ...
- 安装geatpy库到指定的conda虚拟环境中
在Anaconda Prompt中输入conda install geatpy,提示找不到这个库: 输入pip install geatpy,安装成功:但是安装在默认conda环境下(以下为pycha ...
- visibility:hidden和display:none的区别
一.相同点 disable:none和visibility:hidden都能把网页上的某元素隐藏起来 二.不同点 display:none--不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失. ...
- 本地项目的npm安装方法
有些node项目如一些工具类的项目,安装以后通过命令行执行其功能.但是而对于本地自建的项目如何通过npm安装,然后通过命令行(项目定义了命令行)工具执行命令调用其功能呢? 对于这种情况,笔者主要通过两 ...