模板引用
# 官网: https://www.djangoproject.com/
# 首先从子应用中寻找 templates ,再去根目录下找,找不到会报错
# 在templates中创建app02文件夹-->创建index.html
<body>
<table border="1" cellspacing="0" width="80%">
{% for user in users %}
<tr>
<td>
{{ user.username }}
</td>
</tr>
{% endfor %}
</table>
</body>
def index(request):
users = [{"username": "coco"}, {"username": "lili"}]
# 使用模板引擎
return render(request, "app02/index.html", context=locals()) # locals()相当于变量转换成字典
模板渲染
# loader 渲染原理
def load_template(request):
# 1. 加载模板文件,生成模板对象
obj=loader.get_template("app02/index.html")
print(obj,type(obj))
# 2. 渲染
res= obj.render({"name":"coco"})
# 渲染的结果生成html源文件(字符串)
print(res)
return HttpResponse(res)
# render加载和渲染一块进行,是一种快捷方式
return render(request,'app02/index.html',context={"name":"coco"})
模板语法
1. 变量
def handle_var(request):
num = 10
name = "coco"
students = [10, 2, 3, 4]
student = {"name": "lili", "age": 20}
return render(request, "app02/变量.html", locals())
<body>
{# 变量 #}
{# 复杂类型的访问,可以使用点,但不能使用下标 #}
{{ num }}
{{ name }}
{# students[0] 不能使用下标#}
{{ students.0 }}
{{ student.name }}
</body>
2. 过滤器
def handle_filter(request):
num = 10
name = "coco"
# age = None
t1=datetime.now()
content="<h1>自动转义功能,会把<和>转义成普通字符</h1>"
return render(request, "app02/过滤器.html", locals())
<body>
{# 过滤器 : 加工 #}
{{ num|add:"10" }} {# 将一个数 +10 在替换显示 #}
{{ age|default_if_none:"你好" }} {# 如果这个变量为空,就显示 你好(缺省值) #}
{{ age|default:"ok" }}{# 如果变量不存在,就显示 ok #}
{{ t1|date:"Y-m-d H" }} {# 格式化时间 #}
{% autoescape off %} {# 加上这个就会按照标签解释 #}
{{ content }}
{% endautoescape %}
</body>
3. 自定义过滤器
# 1. 在子应用中创建文件夹 templatetags (固定文件名)
# 2. 在 templatetags 文件夹下 创建 mytags.py 文件
from django import template
# 建立模板对象
register = template.Library()
@register.filter(name="sub1") # 在模板中调用的名字
def sub(value): # 参数最多两个
return value - 1
# 3. html模板中调用
# 顶部引用
{% load mytag %}
# 自定义过滤器
{{ 5|sub1 }}
4. django内置标签
def handle_tag(request):
l1 = [1, 2, 3, 4, 5, 6]
num = 30
return render(request, "tag.html", locals())
# if表达式
{# 不可以使用小括号 #}
{# 构造复杂条件需要if嵌套 #}
{% if num < 10 %}
小于10
{% elif num < 20 %}
小于20
{% else %}
其他
{% endif %}
# for循环
{#{% for value in l1 %} {# 正向遍历 #}
{% for value in l1 reversed %} {# 反向遍历 #}
{{ forloop.counter0 }}---{{ value }} {# {{ forloop.counter0 }}:下标从开始 #}
{% empty %} {# 没有数据的时候显示 #}
数据不存在
{% endfor %}