Django的设计模式及模板层
-
传统MVC
- M model 模型
- V view 视图
- C Controller 控制
-
Django 设计模式 MTV
- M model 模型
- V view视图
- T Templates 模板
-
模板配置
-
创建模板文件夹<项目名>/templates
-
在settings.py 中TEMPLATES配置项
- BCKEND:指定模板的引擎
- DIRS:模板的搜索目录(可以多个)
- APP_DIRS: 是否要在应用中templates文件夹中搜索模板文件
- OPTIONS: 有关模板的选项
-
配置乡长,需要修改的部分
- 设置DIRS
‘DIRS‘:[os.path.join(BASE_DIR,‘templates‘)],
- 设置DIRS
-
模板的加载方式
-
通过loader获取模板,通过HttpResponse进行响应
在视图函数中
from django.template import loader # 通过loader加载模板 temp = loader.get_template("模板文件名称") # 通过temp转换成HTML字符串 html= temp.render(字典数据) # 用响应对象将转换后的字符串内容返回给浏览器 return HttpResponse(html)
-
-
使用render()直接加载并相应模板
-
在视图函数中
from django.shortcuts import render return render(request,‘模板文件名‘,字典数据)
-
-
视图层与模板层的交互
-
视图函数中将Python 变量封装到字典中传递到模板
def xxx_view(request) dic = { "变量1":"值1", "变量2": "值2", } return render(request, ‘xxx.html‘, dic)
-
在模板中可以使用 {{ 变量名 }} 的语法,调用视图函数传来的变量
-
-
模板层-变量和标签
-
模板层-变量
-
在模板中使用变量的语法
- {{ 变量名 }}
- {{ 变量名.index }}
- {{ 变量名.key }}
- {{ 对象.方法 }}
- {{ 函数名 }}
-
模板层-标签
- 标签语法
- {% 标签 %}
- 。。。。
- {% 结束标签 %}
-
if 标签
{% if 条件表达式1 %} .。。 {% elfi 条件表达式2 %} .。。 {% endif %}
-
for 标签
{% for 变量 in 可迭代对象 %} ...循环语句 {% empty %} ...可迭代对象无数据是填充语句 {% endfor %} #内置变量- froloop forloop.counter 循环的当前迭代(从1开始索引) forloop.conunter0 循环的当前迭代(从0 开始索引) forloop.revcounter counter值得倒序 forloop.revcounter0 revcounter值得倒序 forloop.first 如果是第一次通过循环,则为真 forloop.last 如果是最后一次通过循环,则为真 forloop.parentloop 当前套循环,parentloop表示外层循环
模板层 过滤器和继承
- 模板层过滤器
- 在变量输出时对变量得值进行处理
- 可以通过使用过滤器来改变变量的输出显示
- 语法:{{变量 | 过滤器1:"参数值1" | 过滤器2:"参数值2" ...}}
- 常用过滤器
- lower 将字符串转换为全部小写
- upper 将字符串转换为大写形式
- safe 默认不对变量内地阿字符串进行html转义
- add:‘n‘ 将value得值增加n
- truncatechars:‘n‘ 如果字符串多余指定得字符串数量,那么会别截断,阶段得字符串将可以翻译得胜率好序列(”。。。。“)结尾。
- 模板得继承
- 模板继承可以使父模板中的内容宠用,子模版直接继承父模板得全部内容,并可以覆盖父模板中对用得块
- 语法-父模板中
- 定义父模板中得块block 标签
- 标识出哪些在子模块中是允许被修改得
- block标签: 在父模板中定义,可以在子模版中覆盖
- 语法- 子模版中
- 继承模板 extends标签(写在模板文件得第一行)
- 例如{% extends ‘base.html‘ %}
- 子模版,重写父模板中得内容块
- {% block block_name %}
- 子模版块覆盖父模板中block_name 块得内容
- {% endblock block_name %}
- 重写得覆盖规则
- 不重写,将按照父模板得效果显示
- 重写则按照重写效果显示
- 注意:模板继承时,服务器得动态内容无法继承
- 继承模板 extends标签(写在模板文件得第一行)