Django——模板
Django 提供一种动态生成 HTML 页面 —— 模板
1、模板语言
模板语言(DTL): 变量 , 注释 , 标签 , 过滤器 , 模板继承
1、变量
<body> <!-- 这个是前端中的注释 --> {# 这种是Django中模板语言的注释 #} <div style="color: red"> <p>变量</p> <p>姓名:{{ name }}</p> <p>年龄:{{ age }}</p> <p>性别:{{ gender }}</p> </div> <div style="color: blue"> <p>调用函数</p> <p>{{ demo }}</p> <p>调用类</p> <p>{{ Demo.name }}</p> <p>{{ Demo.eat }}</p> <p>调用对象</p> <p>{{ ek.name }}</p> <p>{{ ek.eat }}</p> </div> <div> <p>列表</p> <p>{{ ll }}</p> <p>通过下标获取列表中的数据</p> <p>{{ ll.1 }}</p> </div> </body>
def template_view(request): name = '阿宸' age = 17 gender = '男' # 可以将函数,类传递到 html 模板中 def demo(): return '你好呀' class Demo: def __init__(self): self.name = '尔康' def eat(self): return "等下一起去吃KFC" ek = Demo() ll = ['叶晓春','樱岛麻衣','境界'] return render(request , 'template_demo.html' , locals())
2、过滤器
过滤器的格式:{{ 变量名|过滤器名称:数据}}
<body> <div style="color: red"> <p>default 过滤器</p> <p>当变量为空或者为 False 的时候响应为设置的默认值</p> {{ sex | default:'靓仔' }}<br> {{ age | default:'18' }} </div> <div style="color: green"> <p>length 过滤器</p> <p>返回变量的长度</p> {{ name | length }}<br> {{ ll | length }} </div> <div style="color: black"> <p>safe 过滤器</p> <p>可以将带有 html 标签的字符串进行格式转换 </p> {{ name | safe }}<br> {{ html_str }} {{ html_str | safe }} </div> <div style="color: #096"> <p>rendom 过滤器</p> <p>在指定的列表中随机获取一个数据</p> {{ ll | random }} </div> </body>
自定义过滤器
在应用下创建 templatetags 包 , 在这个包内创建一个 py 文件
from django import template register = template.Library() # 自定义过滤器 # name 是定义过滤器名称的 @register.filter(name='max_number') def num(num_1 , num_2): return max(num_1 , num_2)
<div style="color: #096"> <p>自定义过滤器</p> {# 导入自定义过滤器的模块 #} {% load mytag %} {{ age | max_number:27 }} </div>
3、流程控制
if 判断
{% if 判断条件 %} …… {% elif 判断条件 %} …… {% else %} …… {% endif %}
for 循环
{% for 变量名 in 可迭代对象 %} …… {% endfor %}
<p>if 判断</p> {% if age > 18 %} <div style="color: red">{{ name }}</div> {% else %} <div style="color: pink">{{ gender }}</div> {% endif %} <div> <p>for 循环</p> {% for i in ll %} {# forloop 循环信息 #} {# {{ forloop }}#} <li>{{ forloop.counter0 }}:{{ i }}</li> {% endfor %} </div>
4、include 标签
include 标签用户模板的包含
<div style="color: blue"> <p>模板A</p> <p>作者:{{ name }}</p> <p>籍贯:{{ add }}</p> <p>联系地址:{{ tel_addr }}</p> </div>
<div> {# {% include 'include_demo.html' %} #} {# {% include 'include_demo.html' with 导入模板参数 %} #} {% include 'include_demo.html' with name='ac' add='广东' tel_addr='广州天河花城大道'%} </div>
5、自定义 inclusion_tag
制作局部的 html 标签
局部标签中的内容需要通过模板引擎来制作
# 自定义 inclusion_tag # inclusion_tag 制定局部标签在哪一个文件中 @register.inclusion_tag('tag.html') def tag_demo(): ls = ['?:','境界','樱岛麻衣','。。','叶晓春'] return locals()
<ul> {% for l in ls %} <li>{{ l }}</li> {% endfor %} </ul>
<div> {% load mytag %} {# 使用自定义的局部标签 , 标签的名称就是自定义标签的函数名 #} {% tag_demo %} </div>
6、模板继承
子模板继承语法: {% extends '父模板文件名' %}
重写模板:{% block 名称 %}{% endblock 名称 %}
被这个标签包含的 , 子模板可以重写
<body> <div> <p>阿宸好帅</p> </div> {% block content %} <div> <p>等下那个一起去吃KFC</p> <p>尔康、樱岛麻衣</p> </div> {% endblock content %} <div> {% block neiron %} {% endblock neiron %} </div> </body>
{# 继承模板页面 #} {% extends 'f_extend.html' %} {# 重写父模板中的内容 #} {% block content %} <div> <p>樱岛麻衣:我还有倒三角</p> </div> {% endblock content %} {% block neiron %} <p>境界:看回放辣眼睛</p> {% endblock %}