model继承
使用场景:当不同model出现很多重复的字段时,我们可以考虑给他们写一个合理的抽象类
使用方法:
class Humen(models.Model):
name = moedls.charField(
max_length=20,
verbose_name='人名'
)
age = models.IntergeField(
verbose_name='年纪'
)
sex = models.CharField(
max_length = 6
verbose_name='性别'
)
class Meta:
#允许被继承
abstract = True
class Stu(Humen):
score = models.IntegerField(
verbose_name='成绩'
)
class Teacher(Humen):
salary = models.IntegerField(
verbose_name='工资'
)
模板语法
(1)点语法
通过变量访问属性或方法
<ul>
{%for i in teachers%}
#{{i.name}}是在访问属性
<li>{{i.name}}老师的工资是{{i.salary}}美金</li>
#{{i.get_base_msg}}访问方法 不能传参数
<p>{{i.get_base_msg}}</p>
#{%empty%} 在数据为空的时候 显示出来 不为空 就不显示
{%empty%}
<h1>数据为空</h1>
{%endfor%}
</ul>
(2)下标访问数组内的元素
{{ teachers.0.get_base_msg}}
(3)if 条件判断
格式: {% if 表达式 %}
语句
{% endif %}
{% if 表达式 %}
语句
{% else %}
语句
{% endif %}
{% if 表达式 %}
语句
{% elif 表达式 %}
语句
{% endif %}
使用实例(注意等号两边的空格)
{%if i.id == 2%}
<li >{{i.name}}老师的工资是保密</li>
{%else%}
<li>{{i.name}}老师的工资是{{i.salary}}美金</li>
{%endif%}
(4)乘除
语法格式:{% widthratio 数 分母 分子 %}
{%for i in teachers%}
{%widthratio i.age 4 3%}
{%endfor%}
(5)整除
语法格式:{% if 你的数字|divisibleby:要整除几 %}
使用实例
{%for i in teachers%}
{%if i.id|divisibleby:2%}
<li>{{i.get_base_msg}}</li>
{%else%}
<li style="color: green;">{{i.get_base_msg}}</li>
{%endif%}
{%endfor%}
(6)注释
单行 不可见 {#你想注释的内容#}
多行不可见
{%comment%}
你的一大堆注释
{%endcomment%}
(7)获取循环次数
{{ forloop.counter }} 表示当前是第几次循环,从1数数
{{forloop.counter0}}表示当前是第几次循环,从0数数
{{ forloop.revcounter}}表示当前是第几次循环,倒着数数,到1停
{{forloop.revcounter0}}表示当前第几次循环,倒着数,到0停
{{ forloop.first }} 是否是第一个 布尔值
{{ forloop.last }} 是否是最后一个布尔值
(8)判断是否等于
{%ifequal teachers.1.id 2%}
等于
{%else%}
不等于
{%endifequal%}
(9)操作
add {{ 变量 | add : 5 }}
没有减法过滤器,但是加法里可以加负数
{{ 变量 | add : -5}}
lower 将字母转小写
{{ 变量|lower }}
upper 将字母转大写
传参
{{ student | join;'='}}
默认值
{{ var | default value }}
如果变量没有被提供或者为False,空,会使用默认值
指定格式转换日期为字符串
{{ detevar | date:'y-m-d' }}
渲染成html
{{code | safe }}
跨站请求伪造
{% csrf_token %}