模板层之标签

{% if 条件1(可以自己写也可以是用传递过来的数据) %}
<p>周三了 周三了</p>
{% elif 条件2(可以自己写也可以用传递过来的数据) %}
<p>百日冲刺</p>
{% else %}
<p>快要放假了</p>
{% endif %} {% for k in t1 %}
{% if forloop.first %}
<p>这是我的第一次循环{{ k }}</p>
{% elif forloop.last %}
<p>这是我最后一次循环{{ k }}</p>
{% else %}
<p>这是中间循环{{ k }}</p>
{% endif %}
{% empty %}
<p>你给我传的数据是空的无法循环取值(空字符串、空列表、空字典)</p>
{% endfor %} django模板语法取值操作>>>:只支持距句点符
句点符既可以点索引也可以点键
{{d1.hobby.2.a1}}
<p>
{% with d1.hobby.2.a1 as h %} 复杂数据获取之后需要反复使用可以起别名
<a href="">{{ h }}</a>
{% endwith %} </p>

forloop

自定义过滤器、标签及、inclusion_tag(了解)

"""
如果想要自定义一些模板语法 需要先完成下列的三步走战略
1.在应用下创建一个名字必须叫templatetags的目录
2.在上述目录下创建任意名称的py文件
3.在上述py文件内先编写两行固定的代码
from django import template
register = template.Library()
"""
# 自定义过滤器(最大只能接收两个参数)
@register.filter(name='myadd')
def func1(a, b):
return a + b
{% load mytags %}
<p>{{ a|myadd:1 }}</p>

这是定义过滤器过程中的一个报错







# 自定义标签(参数没有限制)
@register.simple_tag(name='mytag')
def func2(a,b,c,d,e):
return f'{a}-{b}-{c}-{d}-{e}'
{% load mytags %}
{% mytag 'jason' 'kevin' 'oscar' 'tony' 'lili' %} # 自定义inclusion_tag(局部的html代码)
@register.inclusion_tag('menu.html',name='mymenu')
def func3(n):
html = []
for i in range(n):
html.append('<li>第%s页</li>'% i)
return locals() menu.html局部页面代码
<ul>
{% for liStr in html %}
{{ liStr|safe }}
{% endfor %}
</ul> {% load mytags %}
{% mymenu 10 %}

模板的继承与导入

模板的继承(重要)
多个页面有很多相似的地方 我们可以采取下列方式
方式1:传统的复制粘贴
方式2:模板的继承
1.在模板中使用block划定字板以后可以修改的区域
{% block 区域名称 %}
{% endblock %}
2.子板继承模板
{% extends 'home.html' %}
{% block 区域名称 %}
子板自己的内容
{% endblock %}
ps:模板中至少应该有三个区域
页面内容区、css样式区、js代码区
补充:子板也可以继续使用模板的内容
{{ block.super}} 模板的导入(了解)
将某个html的部分提前写好 之后很多html页面都想使用就可以导入
{% include 'myform.html' %}

模型层之前期准备

1.自带的sqlite3数据库对日期字段不敏感 有时候会展示错乱所以我们习惯切换成常见的数据库比如MySQL django orm并不会自动帮你创建库 所以需要提前准备好
2.单独测试django某个功能层
默认不允许单独测试某个py文件 如果想要测试某个py文件(主要models.py)
测试环境1:pycharm提供的python console
测试环境2:自己搭建(自带的test或者自己创建)
1.拷贝manage.py前四行
2.自己再加两行
import django
django.setup()
3.django orm底层还是SQL语句 我们是可以查看的
如果我们手上是一个QuerySet对象 那么可以直接点query查看SQL语句
如果想查看所有orm底层的SQL语句也可以在配置文件添加日志记录
搭建测试环境时需要配合数据库进行,在进行数据库迁移命令操作时,我把django自带的makemigrations文件夹删除了然后只要执行makemigrations报错

执行migrate报错



# 不要删除django自带的文件夹!!!!!

ORM常用关键字

models.py 代码
from django.db import models
# Create your models here.
class User(models.Model):
name = models.CharField(max_length=32, verbose_name='用户名')
age = models.IntegerField(verbose_name='年龄')
register_time = models.DateTimeField(verbose_name='注册时间', auto_now_add=True) '''
针对时间字段有两个重要的参数
auto_now : 每次操作数据都会自动更新当前时间
auto_now_add:创建数据自动获取当前时间 后续修改不人为操作的情况下不会更新
''' def __str__(self):
return f'用户对象{self.name}' tests.py代码 import os def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoday05.settings')
import django
django.setup()
from app01 import models
# print(models.User.objects.filter())
# 1.create() 创建数据并直接获取当前创建的数据对象
# res = models.User.objects.create(name='tony', age=21)
# res = models.User.objects.create(name='kevin', age=19)
# res = models.User.objects.create(name='kkkk', age=22)
# res = models.User.objects.create(name='llll', age=25)
# res = models.User.objects.create(name='mmmm', age=17)
# print(res)
# 2.filter() 根据条件筛选数据 <QuerySet [<User: 用户对象jsaon>, <User: 用户对象tony>, <User: 用户对象kevin>, <User: 用户对象kkkk>, <User: 用户对象llll>, <User: 用户对象mmmm>]>
# res = models.User.objects.filter()
# res = models.User.objects.filter(name='jsaon') # <QuerySet [<User: 用户对象jsaon>]>
# res = models.User.objects.filter(name='jsaon',age=19)
# 3. first() last() QuerySet支持索引取值但是只支持正数 并且orm不建议你使用索引
# res = models.User.objects.filter()[1]
# res = models.User.objects.filter(pk=100)[0] # 数据不存在索引取值会报错
# res = models.User.objects.filter(pk=100).first() # 数据不存在不会报错而是返回None
# res = models.User.objects.filter(pk=100).last() # 数据不存在不会报错而是返回None
# 4.update() 更新数据(批量更新)
# models.User.objects.filter().update() # 批量更新
# models.User.objects.filter(id=1).update() # 单个更新
# 5.delete() 删除数据(批量删除)
# models.User.objects.filter().delete() # 批量删除
# models.User.objects.filter(id=1).delete() # 单个删除
# 6.all() 查询所有数据 结果是QuerySet[数据对象1,数据对象2]
# res = models.User.objects.all()
# 7.values() 根据指定字段获取数据 结果是 QuerySet [{},{},{},{}]
# res = models.User.objects.all().values('name')
# res = models.User.objects.filter().values()
# res = models.User.objects.values()
# 8.values_list() 根据指定字段获取数据 结果是QuerySet [(),(),(),()]
# res = models.User.objects.all().values_list('name','age')
# 9.distinct() 去重 数据一定要一模一样才可以 如果有主键肯定不行
# res = models.User.objects.values('name','age').distinct()
# 10.order_by() 根据指定条件排序 默认是升序 字段前面加负号就是降序
# res = models.User.objects.all().order_by('age')
# 11. get() 根据条件筛选数据并直接获取到数据对象 一旦条件不存在会直接报错 不建议使用
# res = models.User.objects.get(pk=1)
# res = models.User.objects.get(pk=100,name='mmmm')
# 12.exclude() 取反操作
# res = models.User.objects.exclude(pk=11)
# 13.reverse() 颠倒顺序(被操作的对象必须是已经排序的才可以)
# res = models.User.objects.all().order_by('age') # <QuerySet [<User: 用户对象mmmm>, <User: 用户对象kevin>, <User: 用户对象tony>, <User: 用户对象kkkk>, <User: 用户对象llll>]>
# res1 = models.User.objects.all().order_by('age').reverse() # <QuerySet [<User: 用户对象llll>, <User: 用户对象kkkk>, <User: 用户对象tony>, <User: 用户对象kevin>, <User: 用户对象mmmm>]>
# 14 coint() 统计结果集中数据的个数
# res = models.User.objects.all().count() # 5
# 15.exists() 判断结果集中是否含有数据 如果有则返回 True 没有则返回False
res = models.User.objects.all().exists() # True
res1 = models.User.objects.filter(pk=100).exists() # False
print(res)
print(res1)
main()

python之路49 模板层标签 自定义过滤器 模板继承、模型层准备、ORM部分操作的更多相关文章

  1. Django 笔记(四)模板标签 ~ 自定义过滤器

    模板标签: 标签在渲染的过程中提供任意的逻辑 语法: 由{% ... %} 和 {% end... %} 常用标签: with:类似取别名 模版继承: Django模版引擎中最强大也是最复杂的部分就是 ...

  2. Python - Django - 模板语言之自定义过滤器

    自定义过滤器的文件: 在 app01 下新建一个 templatetags 的文件夹,然后创建 myfilter.py 文件 这个 templatetags 名字是固定的,myfilter 是自己起的 ...

  3. Django - 环境搭建、url、视图、模板、标签、过滤器

    (一).简介 简介就不多说了,网上的内容一大堆.总结来说,django是走大而全的路线,写项目超级快,几乎什么都为你考虑到了,你就乖乖照着它的格式来写就行了. 这里来一些基本认知: web应用框架(w ...

  4. django模板中的自定义过滤器

    (1)在APP下创建templatetags文件夹,与Models.py.views.py等同级,templatetags文件夹下添加__init__.py文件,可为空,再添加一个模块文件,例如cpt ...

  5. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  6. django系列4.2--自定义标签, 自定义过滤器, inclusion_tag, 引入静态文件(css,js等)

    项目的目录为 在app中创建templates时,最好要再创建一个app名相同的文件夹,因为项目找文件时从第一个app开始遍历,不同app内的同名文件会有冲突,所以这样处理 一.自定义标签和过滤器 1 ...

  7. 解决 idea template jsp模板中使用自定义路径 模板不显示问题

    ${} 是一个模板中的关键字,所以建立时需要用 \ 注释即可正常显示  ${APP_PATH}

  8. Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)

    摘要: 模版层(模板语法) 模板语法 过滤器 标签 自定义过滤器.标签 inclusion_tag 模板的继承 模板的导入 一.模板语法: 常用语法:{{     }}    变量相关{% %}    ...

  9. Django 模型层(标签、过滤器、模板的继承与导入)

    过滤器/自定义过滤器 模板语法中的过滤器类似于python中的内置方法,在我们把数据从后端通过rander传入到前端html文件中之后,在前端我们可以通过模板语法,对传入的数据再进行以通骚操作. 首先 ...

  10. Django 你需要掌握的模型层(标签、过滤器、模板的继承与导入)

    Django 模型层(标签.过滤器.模板的继承与导入) 好文章来自超哥:https://www.cnblogs.com/guanchao/p/11006062.html   过滤器/自定义过滤器 模板 ...

随机推荐

  1. Spring Ioc容器xml配置

    Spring Ioc容器xml配置基本结构: <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  2. 2022-08-11-emo了

    layout: post cid: 7 title: emo了 slug: 7 date: 2022/08/11 10:14:00 updated: 2022/08/11 10:15:40 statu ...

  3. Node.js躬行记(24)——低代码

    低代码开发平台(LCDP)是无需编码(0代码)或通过少量代码就可以快速生成应用程序的开发平台.让具有不同经验水平的开发人员可以通过图形化的用户界面,通过拖拽组件和模型驱动的逻辑来创建网页和移动应用程序 ...

  4. IDEA快速生成数据库表的实体类

    IDEA连接数据库 IDEA右边侧栏有个DataSource,可以通过这个来连接数据库,我们先成功连接数据库 点击进入后填写数据库进行连接,注意记得一定要去Test Connection 确保正常连接 ...

  5. C语言------结构体和共用体

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...

  6. 15行python代码实现人脸识别

    方法一:face_recognition import cv2 import face_recognition img_path = "C:/Users/CJK/Desktop/1.jpg& ...

  7. 10.异步mysql

    python中操作mysql连接.操作.断开都是网络IO #安装支持异步aiomysql的模块 pip3 install aiomysql async def execute(): # 网络IO操作, ...

  8. Pthread 并发编程(二)——自底向上深入理解线程

    Pthread 并发编程(二)--自底向上深入理解线程 前言 在本篇文章当中主要给大家介绍线程最基本的组成元素,以及在 pthread 当中给我们提供的一些线程的基本机制,因为很多语言的线程机制就是建 ...

  9. 高精度加法(Java)

    题目描述 高精度加法,相当于 a+b problem,不用考虑负数. 输入格式 分两行输入. a , b ≤ 10^500 输出格式 输出只有一行,代表 a + b  的值. 思路 使用数组进行模拟, ...

  10. Reversal

    # 35. Reversal- 出题人:OJ- 标签:["String"]- 难度:简单- 总分数:100## 题目描述<p>输入一个英文句子,句子包含若干个单词,每个 ...