模板层之标签

{% 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. 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串

    [算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...

  2. Unexpected token u in JSON at position 0

    文章目录 1.1 错误原因: 1.2 解决思路: 1.1 错误原因: 因为JSON.parse()不能解析字符串中的undefined 出错的结果:某一行的这个字段的值为空,就会报错,整个表格都显示不 ...

  3. NLP之TextLSTM(预测单词下一个字母)

    LSTM 目录 LSTM 1.理论 1.1 LSTM与RNN 1.1.1 RNN的缺点 1.1.2 LSTM 1.2 LSTM基本结构 2.实验 2.1 实验步骤 2.2 算法模型 1.理论 1.1 ...

  4. maven 重复依赖不同版本 选择规则

    maven 重复依赖不同版本 选择规则 本篇主要来看看 maven 对于 重复依赖的jar的不同版本时候 它内部的选择规则, 很多时候我们在搭建环境的时候 不注意就会存在依赖冲突等问题 那依赖冲突的时 ...

  5. SQL--Case When.. Then.. end的使用

    Case  When.. Then.. end的使用场景 当字段有不同的值,根据不同的值表示不同的内容 use [数据库名] go if exists( select * from sys.views ...

  6. nrf9160做主控连接阿里云——(mqtt_simple例程)

    简介:基本每一个云都支持MQTT,这种轻量级协议在数据量不大的应用上是一个很好的选择.上一篇博客使用SLM例程去连接了阿里云,本次使用mqtt_simple去连接云进行测试,关于一些已近在前面文章中演 ...

  7. 蓝桥杯赛前复习C++

    C标准库常用函数 memset函数:暴力清空 void *memset(void *str, int c, size_t n) str -- 指向要填充的内存块. c -- 要被设置的值.该值以 in ...

  8. Pictionary 方法记录

    [COCI2017-2018#5] Pictionary 题面翻译 题目描述 在宇宙一个不为人知的地方,有一个星球,上面有一个国家,只有数学家居住. 在这个国家有\(n\)个数学家,有趣的是,每个数学 ...

  9. pycharm安装第三方的包

    这里以安装selenium为例子 在file下找到settings 在弹出的窗口点击python interpreter ,然后在右侧点击[+] 在弹窗顶部输入要导入的包名,在下方列表找到对应包后,点 ...

  10. Day16自定义异常

    package com.exception.demo02;//自定义的异常类public class MyException extends Exception{ //传递数字>10抛出异常 p ...