根据视图传进来的字典数据,可以动态显示数据的html页面
使用方式:
render(request,“template.html”,dict_data)
配置模板
方式1:
项目根目录下,创建一个templates文件夹,在其内部放入一些xxx.html 模板页面
/templates/index.html
/templates/app1/index.html
然后,进入settings.py
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',
],
},
},
]
DIRS,根目录下的模板路径,添加[os.path.join(BASE_DIR,“templates”)]
APP_DIRS,是否到应用下的templates下搜索模板,默认True
方式2:
不处理settings.py 配置文件,直接在app目录下创建templates/appname/index.html
加载模板
方式1:
from django.template import loader
from django.http import HttpResponse
def view_func(request):
t = loader.get_template("index.html") #或者appname/index.html
html = t.render(dict_data) #html str
return HttpResponse(html)
方式2:
from django.shortcuts import render
def view_func(request):
return render(request,"index.html",dict_data)
模板变量
在模板内部,直接使用dict_data 的key,获取对应的value
{{ key }}
value的数据类型:
str,
int,
list/tuple/dict/obj/func
#在视图中实现
class Test():
def __init__(self):
self.name = "this is an obj"
def run(self):
print("python obj running...")
return "python obj runned"
dict_data = {
"name":"jack", #str
"age":23, #int
"friends":["jack","tom","lucy"], #list
"sex":("female","male"), #tuple
"data":{"k1":"v1","k2":"v2"}, #dict
"obj":Test(),#obj
}
对象调用函数,直接obj.func 返回值显示在页面
模板标签
{% for i in klist %} 将一些功能嵌入到模板中
#index.html
{% for friend in friends %}
<div>{{friend}}</div>
{% empty %}
<div>friends is_ empty</div>
{% endfor %}
#条件判断
{% if name %}
<div>{{name}}</div>
{% elif age %}
<div>{{age}}</div>
{% else %}
<div>xxxx</div>
{% endif %}
练习
1.GET 请求 /calculator 返回calc.html
2. 点击计算,POST 请求/calculator ,返回计算结果
显示在calc.html页面中