模板Templates
模板文件夹
Templates文件夹存放模板文件,可以使用模板语法,注意static文件夹里面html文件不能使用模板语法。
Templates可以是自定义的名字,在子应用目录下需要注册,在工程目录下需要在settings.py
里注册,然后将文件夹标记为Template Folter。
Django默认的模板配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
...
}
]
在views里面返回需要渲染在返回,用render()
方法,return render(request, 'Template.html', locals())
模板语法
结构标签
- block
- 定义一个块,子类标签中引用。
- extends
- 加载父类的html文件
{% extends 'base.html' %}
- 加载父类的html文件
- include
- 尽量不要使用
使用block标签来加载静态文件:
{% load static %}<!--不可省略-->
<!--使用block把html代码分割,extCSS是自定义命名-->
{% block extCSS %}
{{ block.super }}<!--继承父类block的内容-->
{% endblock %}
使用block + extends,化零为整,include由零化一
父标签base.html中定义一个block
{% block header %}
<h3>
this is a header block
</h3>
{% endblock %}
在子标签home.html中继承
{% extends 'base.html' %}
{% block header %}
{# 这是一个模板注释,网页中检查元素是不可见的 #}
{% 这是一个多行模板注释,也是不可见的。默认子标签的内容会覆盖付标签的内容,通过super来继承福标签内容 %}
{{ block.supper }}
<h3>
this is a child html
</h3>
{% endblock %}
变量语法
使用点语法来获取变量,在视图中返回json或者字典数据,在标签中通过key来获取。
扫描二维码关注公众号,回复:
6514720 查看本文章
<p>{{ params }}</p>
<p>{{ param.name }}</p>
<!-- 获取列表里面的单个元素,这里是一个用户对象 -->
<p>{{ user_list.1 }}</p>
<!-- 获取对象的属性 -->
<p>{{ user_list.2.name }}</p>
<!-- 可以在试图函数里面使用__str__将对象转化为字符串 -->
使用点语法来引用对象方法:
<p>biger:{{ dic.name.upper }}</p>
标签语法
形如{% tag %}
的语句,就是Django的标签语法,可以实现复杂的逻辑,一些标签需要开始和结束标签
- for循环
<h3>循环取值1</h3><hr>
{% for item in person_list %}
<p>{{ item.name }},{{ item.age }}</p>
<!-- 一个可选的empty标签,如果没有元素是展示 -->
{% empty %}
<p>sorry,no person here</p>
{% endfor %}
<h3>循环取值2:倒序</h3><hr>
{% for item in person_list reversed %}
<!--序号从1开始-->
<p>{{ forloop.counter }}----->{{ item.name }},{{ item.age }}</p>
<!--序号从0开始-->
<p>{{ forloop.counter0 }}----->{{ item.name }},{{ item.age }}</p>
<!-- 序号倒序 -->
<p>{{ forloop.revcounter }}----->{{ item.name }},{{ item.age }}</p>
{% endfor %}
<h3>循环取值3:字典</h3><hr>
{% for k,v in d.items %}
<p>{{ k }},{{ v}}</p>
{% endfor %}
- if标签
{% if i > 300 %}
<p>大于{{ i }}</p>
{% elif i == 200 %}
<p>等于{{ i }}</p>
{% else %}
<p>小于{{ i }}</p>
{% endif %}
- with标签
使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的
{% with total=business.employees.count %}
<!-- 复数显示及国际化使用pluralize -->
{{ total }} employee{{ total|pluralize }}
{% endwith %}
- csrf_token
用来标记跨站请求伪造保护
{% csrf_token %}
- 转义开关
作用:views.py传过来的字典值是一串html代码,默认是按字符串输出的,如果转义后则会编译成html格式在页面输出
- safe方法转义
{ contents|safe }<!--添加safe完成转义,不建议-->
- 包裹起来转义
<!--off是关闭转义,on是开启-->
{% autoescape off %}
{{ content }}
{% endautoescape %}
渲染模板
模板渲染返回,可以使用render方法,也可以使用HttpResponse来实现render的功能
# 首先加载模板文件
# 返回<class 'django.template.backends.django.Template'>
template = loader.get_template('Hello.html')
# 渲染模板
result = template.render(context={"msg": "okba"})
# 用HttpResponse返回
return HttpResponse(result)