@作用和目录位置
- template一般用于存放html文件
- template可以是自定义命名的
在子应用目录下是需要注册的
但在工程目录下需要在stting.py
里注册:
ps:还需要make为template Folter
# django默认的模板配置
TEMPLATES = [
{
...,
# 模板路径
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
],
使用template下的html文件时需要在views.py里对应的方法使用
def where(request):
students =Students.objects.all()
datadict={
'stu':students
}
return render(request,'where.html',context=datadict)
@模板语法
- 读取数据
#根据关联查找
def func(request,num):
#获取对应的班级对象
grade = Grade.object.get(pk = num)
#获取班级下所有学生的对象列表
stulist = grade.student_set.all()
#xxx是传过来字典的键名
{{ xxx.attr}}//通过键名调用相关属性
{{ ddd.i}}//ddd传过来的是容器或者集合,通过下标i调用
{{ xxx.method }}//通过键名调用相应方法
{{ xxx }}//xxx可以是变量,也可以是对象属性
{{ xxx.key }}//传过来的字典里又有字典
{% %}//实行代码或代码段
@模板内的注释
1 <!--普通HTML注释是可见的-->
2 {# 模板注释是不可见的 #}
3 {% comment %}...{% endcomment %}(也是不可见得)
@模板内的计算
- 加法和减法
#加法:value是传过来的值
{{ value|add:10 }}//加10
#减法
{{ value|add:-10 }}//减10
乘除法
#相当于a/b*c,如果要进行2元运算则把第三个设成1 就行了
{% widthratio a b c %}
@大写转换
#大写转小写
{{ animal.a_name|lower }}
#小写转大写
{{ animal.a_name|upper }}
@流程控制(遍历和判断)
- 遍历
#获取下标
{{ forloop.counter }}//返回的集合下标从1开始
{{ forloop.counter0 }}//返回的集合下标从0开始
{{ forloop.revcounter }}//索引从最大长度到1
{{ forloop.revcounter0 }} //索引从最大长度到0
- if 条件
#下面2个,在for循环中使用
{% if forloop.first %},{% if forloop.last %}
例如:
{% if forloop.first %}
...
{% elif forloop.last %}
...
{% else %}
...
{% endif %}
#判断是否相等
1 {% ifequal value1 value2 %}...{% else %}...{% endifequal %}
2 {% ifnotequal value1 value2 %}...{% else %}...{% endifnotequal %}
@转义开关
作用:就是views.py传过来的字典值是一串html代码,一般正常是按字符串输出的,如果转义后就会编译成html格式在页面输出
- safe方法转义
{ contents|safe }//添加safe完成转义
- 包裹起来转义
#off是关闭转义,on是开启
{% autoescape off %}
{{ content }}
{% endautoescape %}
@父辈挖坑子孙填
就是子类继承父类后可以在父类的模块内重写和修改
- 兼并
{% extends 'base_main.html' %}//继承另一个模块
{% include xxx.html %}//兼并另一个模板使之成为页面的一部分
{% load static %}//不可省略
#使用block把html代码分割,extCSS是自定义命名
{% block extCSS %}
{{ block.super }}//继承父类block的内容
...
{% endblock %}
@模板渲染过程
使用HttpResponse完成render的功能
- 1加载模板
template = loader.get_template('Hello.html')//返回<class 'django.template.backends.django.Template'>
- 2渲染模板
result = template.render()//返回<class 'django.utils.safestring.SafeText'>
renturn HttpResponse(result)// 完成
result = template.render(context={"haha":"你哈什么哈"})//渲染时给模板传递数据