模板层之标签、自定义模板语法、母版(模版)的继承与导入、模型层前期准备知识点、ORM常用关键字
今日内容概要
模板层之标签
if判断
{% if 条件1 %} #条件1成立
<p>Hello!</p> #执行
{% elif 条件2 %} #条件1不成立 条件2成立
<p>Hi!<p> #执行
{% else %} #条件1条件2都不成立
<p>Bye!</p> #执行
{% endif %}
for循环
{% for k in d1 %}
<p>{{ k }}</p>
{% endfor %}
循环打印字典里的key
关键字:forloop
结合使用
{% for k in d1 %}
{% if forloop.first %}
<p>这是我的第一次循环 {{ k }}</p>
{% elif forloop.last %}
<p>这是我的最后一次循环 {{ k }}</p>
{% else %}
<p>这是中间循环 {{ k }}</p>
{% endif %}
{% endfor %}
关键字:empty (检测数据是否为空 支持for循环 里面却没有数据值的 )
{% for k in t1 %}
{% empty %}
<p>你给我传的是空的</p>
{% endfor %}
django模板语法取值操作>>>:只支持句点符
句点符据可以点索引也可以点键
d1 = {'name': 'jason', 'age': 18,'hobby':['read','music',{'a':111,"b":222}]}
#拿111
{{ d1.hobby.2.a }}
{% with d1.hobby.2.a as H %}
<a href="">{{ H }}</a> #复杂数据获取后需要经常使用 可以起别名
{% endwith %}
自定义过滤器、标签及inclusion_tag(了解)
'''
必须要先完成下列的三步走战略
1.在应用下创建一个templatetags的目录
2.在上述目录下创建任意名称的py文件
3.在上述文件内先编写两行固定代码
from django import template
register = template.Library()
'''
自定义过滤器
@register.filter(name='myadd')
def func1(a,b): #最大只能接收两个参数
return a*b
要先加载过滤器
{% load xxx %} #自己创建的py文件名字
<p>{{ i|myadd:1 }}</p>
自定义标签
@register.simple_tag(name='mytag')
def func2(a,b,c) #参数没有限制
return f'{a}-{b}-{c}'
{% load xxx %}
{% mytag 'jason' 'kevin' 'joyce' %}
自定义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()
{% load mytags %}
{% mymenu 20%}
模(母)板的继承与导入
模板的继承
多个页面有很多相似的地方 我们可以采取下列方式
方式1: 传统的复制粘贴
方式2:模板的继承
1.在模板中使用block挂顶子板以后可以修改的区域
{% block 区域名称(随便) %}
{% endblock %}
2.子板继承模板
{% extends 'home。html' %}
{% block 区域名称 %}
子板自己的内容
{% endblock %}
ps:模板中至少应该有三个区域
页面内容区、css样式区、js代码区
子板也可以继续使用模板的内容
{{ block.super}}
可以连续要
模板的导入
新建一个不是一个完整的页面 单独封装
将某个html的部分提前写好 之后很多html页面都想使用就可以导入
{% include 'myfrom.html'%}
模型层之ORM常见关键字
1.自带的sqlite3数据库对视键字段不够敏感 有时会展示错乱
auto_now_add 创建数据自动获取当前时间 后续不人为i操作的话不会修改
auto——now 每次操作数据都会自动更新当前数据
2.单独测试django某个功能层
默认不允许单独测试某个py文件
测试环境搭建:
测试环境1:pycharm提供的python console
测试环境2:自己搭建(自带的test或者自己建一个py文件)
1.拷贝manage.py前四行
2.自己在加两行
import django
django.setup()
3.django orm底层还是sql语句 我们可以查看
如果我们手上是一个QuerySet对象 那么可以直接点query查看sql语句
如果想查看orm底层的sql语句也可以在配置文件中添加日志记录