Django 提供一种动态生成 HTML 页面 —— 模板
模板语言(DTL): 变量 , 注释 , 标签 , 过滤器 , 模板继承
<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())
过滤器的格式:{{ 变量名|过滤器名称:数据}}
<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>
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>
include 标签用户模板的包含
<div style="color: blue">
<p>模板Ap>
<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>
制作局部的 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>
子模板继承语法: {% extends '父模板文件名' %}
重写模板:{% block 名称 %}{% endblock 名称 %} 被这个标签包含的 , 子模板可以重写
<body>
<div>
<p>阿宸好帅p>
div>
{% block content %}
<div>
<p>等下那个一起去吃KFCp>
<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 %}