在工程中创建模板目录templates。
在templates目录中新建一个模板文件,如index.html
在settings.py配置文件中修改TEMPLATES配置项的DIRS值:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 此处修改 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
Django提供了一个函数render实现模板渲染。
render(request对象, 模板文件路径, 模板数据字典)
from django.shortcuts import render def index(request): context={'city': '北京'} return render(request,'index.html',context)
变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。
语法如下:{{ 变量 }}
1)for循环:
{% for item in 列表 %} 循环逻辑 {{forloop.counter}}表示当前是第几次循环,从1开始 {%empty%} 列表为空或不存在时执行此逻辑 {% endfor %}
2)if条件:
{% if ... %} 逻辑1 {% elif ... %} 逻辑2 {% else %} 逻辑3 {% endif %}
比较运算符如下:
== != < > <= >=
布尔运算符如下:
and、or、not
注意:运算符左右两侧不能紧挨变量或常量,必须有空格。
{% if a == 1 %} # 正确 {% if a==1 %} # 错误
语法如下:
变量|过滤器:参数
列举自带过滤器几个如下:
data|default:'默认值'
value|date:"Y年m月j日 H时i分s秒"
template提供的内置过滤器,不够用,不灵活,就可以自己定义一个过滤器:
1.在自己的app里建一个templatetags包,在包里创建一个后面要在HTML文件引用的py文件,
2.在py文件中,先导入from django import template ,
实例化对象register = template.Library() 创建一个template能认识的函数 对创建的每一个过滤器,都要用加上装饰器
3.在HTML文件中引用
3.1 load mytag
3.2 使用过滤器
模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。
如果发现在多个模板中某些内容相同,那就应该把这段内容定义到父模板中。
标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。 为了更好的可读性,建议给endblock标签写上名字,这个名字与对应的block名字相同。父模板中也可以使用上下文中传递过来的数据。
{% block 名称 %} 预留区域,可以编写默认内容,也可以没有默认内容 {% endblock 名称 %}
标签extends:继承,写在子模板文件的第一行。
{% extends "父模板路径"%}
子模版不用填充父模版中的所有预留区域,如果子模版没有填充,则使用父模版定义的默认值。
填充父模板中指定名称的预留区域。
{% block 名称 %} 实际填充内容 {{ block.super }}用于获取父模板中block的内容 {% endblock 名称 %}
1、单行注释语法如下:
{#...#}
2、多行注释使用comment标签,语法如下:
{% comment %} ... {% endcomment %}