1,模板介绍
1,创建模板与模板配置
在 settings.py 中有一个 TEMPLATES 变量
1. BACKEND : 指定模板的引擎
2. DIRS : 指定保存模板的目录们
3. APP_DIRS : 是否要在应用中搜索模板本
4. OPTIONS : 有关模板的选项们
2,修改配置
修改settings.py文件,设置TEMPLATES的DIRS值为
'DIRS': [os.path.join(BASE_DIR, 'templates')]
3,模板的加载方式
1, from django.template import loader
t = loader.get_template("模板名称")
html = t.render()
return HttpResponse(html)
2, from django.shortcuts import render
return render(request,'模板的名称')
4,模板的传参
1, 在模板中使用变量语法(双大括号)
{{ 变量名 }}
urls:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^page2$', views.page2_render),
]
views:
class Dog:
def __init__(self,k,c):
self.kinds=k
self.color=c
def info(self):
return self.color+"的"+self.kinds+"狗"
def page2_render(request):
d={"name":"老魏",
"age":35,
"hobby":["看书","看电影"],
"friend":{"name":"小张","age":25},
"pet":Dog("二哈","黑白色"),
}
# 第二种传参方式
return render(request,'page2.html',d)
templates:
Document
这是一个带参数的模板
姓名:{{name}}
年龄:{{age}}
爱好:{{hobby}}
第一个爱好:{{hobby.0}}
第一个爱好:{{hobby.2}}
朋友:{{friend}}
朋友名字:{{friend.name}}
宠物:{{pet}}
宠物种类:{{pet.kinds}}
宠物颜色:{{pet.color}}
宠物方法:{{pet.info}}
2, 后端中
必须将变量封装到字典中才允许传递到模板上
dict = {
"变量1":"值1",
"变量2":"值2",
}
5,模板的标签
1,作用:将一些服务端的功能嵌入到模板中
2,标签语法
{% 标签 %}
{% 结束标签 %}
3,if标签
{% if %}
...
{% elif %}
...
{% else %}
...
{% endif %}
views:
def page3_tag(request):
tag={"name":"魏",
"has_car":None,
"age":65,
"hobby":["读书","看报","喝茶","吹牛"],
}
return render(request,'page3.html',tag)
urls:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^page3$', views.page3_tag),
]
templates:
{% if has_car %}
{{name}} 有车
{% else %}
{{name}} 么有车
{% endif %}
```
4,for标签(内置变量forloop,for...empty标签,cycle标签, )
{% for 变量 in 可迭代对象 %}
{% endfor %}
{% for x in hobby %}
第{{forloop.counter}}个爱好:{{ x }}
{% if forloop.first %}
-----------------------
{% endif %}
{% empty %}
---数据为空---
{% endfor %}
5,cycle标签(常和for循环搭配使用 依次循环调用cycle后面的值)
views:
class Students:
def __init__(self,name,age,score):
self.name=name
self.age=age
self.score=score
def page4(request):
students={
"students":[
Students("小张",10,100),
Students("小李",20,200),
Students("小张",30,300),
]
}
return render(request,'page4.html',students)
templates:
{% for s in students %}
{{ s.name }} |
{{ s.age }} |
{{ s.score }} |
{% endfor %}
6,注释 {# 被注释的内容 #}
2,过滤器
1,作用:在变量输出前,对其值进行处理以改变变量的显示
2,语法:{{变量|过滤器1:参数1|过滤器2:参数2...}}
3,举例:
string='Welcome to Beijing'
string={{string}}
大写内容是:{{ string | upper }}
省略后的内容:{{ string | truncatechars:14 }}
省略后的内容:{{ string | truncatewords:1 }}
省略后的大写内容:{{ string | truncatechars:14 | upper }}
4, 文档参见:
5,转义
开启转义
{% autoescape on %}
{{ body }}
{% endautoescape %}
关闭转义
{% autoescape off %}
{{ body }}
{% endautoescape %}
3,模板的继承
1,作用:当前模块继承来自一个父模块
2,语法:{% extends '父模块名称' %}
3,举例:
{% extends "./base2.html" %}
{% extends "../base1.html" %}
{% extends "./my/base3.html" %}
4,对于父类模板 可以修改的部分
{% block body01 %}
{% endblock %}
5,对于子类 先要继承父类 再重写
{% block body01 %}
修改后的部分
{% endblock %}
4,url反向解析
1,作用:根据urls列表中关键字name=来确定唯一的名字,可以根据这个名字反推出此url的信息
2,语法:url(regex, views, kwargs=None, name="别名")
举例:url(r'^user_login/$', views.login, name="login")
在模板中: {% url '别名' %}
{% url '别名' '参数值1' '参数值2' %}
3,示例
urls:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^person/(\w+)$', views.person,name='person'),
url(r'^info/(\w+)$', views.info,name='info'),
]
views:
def person(request,name):
return render(request,'person.html',locals())
def info(request,name):
s=name+"的个人信息"
return HttpResponse(s)
templates:
Document
姓名:{{name}}
{# {% url ‘别名’ ‘参数值1’ ‘参数值2’ %} #}
跳转到{{name}}个人信息