在上篇文章中我们学习了Django框架——路由,这篇文章我们学习Django框架——模版。
在学习之前,先展示我们新建的Django项目目录,方便大家更好地学习。
模版
在Django框架中,模版是可以帮助开发者快速生成呈现给用户页面的工具,是一个web开发必备的模块。因为我们在渲染一个网页的时候,并不是只渲染一个纯文本字符串,而是展示美观的HTML界面。
首先在templates文件夹中创建名为index.html文件,该文件内容为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Django模版</title>
</head>
<body>
<h1>您正在学习Django模版</h1>
</body>
</html>
在Django框架中使用render方法返回模版,其语法格式很简单,如下所示:
render(request,'模版',{'参数名':'参数值'}) # 参数值类型非字典写法
render(request,'模版',传递的参数) # 参数值为字典写法
在views.py文件中视图函数如下:
from django.shortcuts import render
def index(request):
data= {
'name':'zhangsan',
'age':23,
'likes':['唱','跳','rap'],
'address':{'city':'广州','province':'广东'},
'friend':[
{'name':'小明','age':20 },
{'name':'小军','age':23 },
{'name':'小红','age':18 }
]
}
return render(request,'index.html',data)
在urls.py文件绑定index视图函数,示例代码如下:
from django.urls import path
from App.views import *
urlpatterns = [
path('index/',index),
]
接下来启动Django程序并访问http://127.0.0.1:8000/index/,这样就成功渲染了模版。
变量
我们成功渲染了模版,但还没在模版中使用传递过来的参数,要使用传递过来的参数,那么就需要使用模版变量了,模版变量用法如下:
{{ 参数名 }}
注意:
-
当我们使用参数中的方法时,方法名后面不能有括号,只需要通过.方法名即可;
-
获取指定的列表某个值时,需要通过.列表下标,不能使用[列表下标]的方式。
在index.html文件中的body标签添加如下代码:
<p>名字:{{ name.upper }}</p> {# 使用upper方法将名字转换为大写 #}
<p>爱好:{{ likes.1 }}</p> {# 获取第二个爱好 #}
接下来重新访问http://127.0.0.1:8000/index/即可,页面如下:
这样就成功使用了传递过来的参数。
模板标签
当模板传入的数据需要我们循环遍历变量或者对变量做判断时,我们可以使用模板标签,由{% 和 %}定义,例如if语句的标签语法为:
{% if 判断条件 %}
语句
{% endif %}
注意:标签是成对存在的。
if语句
if语句一共有三种情况,分别为单分支,双分支,多分支,用法如下:
{% if 判断条件 %} {# 单分支写法 #}
语句
{% endif %}
{% if 判断条件 %} {# 双分支写法 #}
语句
{% else %}
语句
{% endif %}
{% if 判断条件 %} {# 多分支写法 #}
语句
{% elif 判断条件 %}
语句
{% else %}
语句
{% endif %}
也可以判断条件中添加and、or等运算符,在index.html文件中的body标签添加如下代码:
{% if age > 18 %}
<p>已成年了</p>
{% endif %}
{% if age < 18 %}
<p>未成年</p>
{% else %}
<p>已成年了</p>
{% endif %}
{% if age < 18 %}
<p>未成年</p>
{% elif age > 18 and age < 40 %}
<p>正处于青壮年时期</p>
{% else %}
<p>已成年了</p>
{% endif %}
访问http://127.0.0.1:8000/index/如下:
for循环
for循环用法如下:
{% for 变量 in 列表 %} {# 列表循环 #}
语句
{% empty %}
语句
{% endfor %}
当列表为空或不存在时,执行empty之后的语句。index.html文件添加如下示例代码:
{% for i in likes %}
{{ i }}
{% empty %}
<p>列表为空</p>
{% endfor %}
这样就成功循环变量列表了,for循环还可以嵌套for循环,用法如下:
{% for 变量 in 列表 %}
{% for 变量1 in 变量 %}
语句
{% empty %}
语句
{% endfor %}
{% empty %}
语句
{% endfor %}
index.html文件添加如下示例代码:
{% for i in likes %}
{% for ii in likes %}
{{ ii }}
{% endfor %}
{% empty %}
<p>列表为空</p>
{% endfor %}
访问http://127.0.0.1:8000/index/如下:
在循环体中,我们还可以执行如下代码获取到循环中的其他信息:
{{ forloop.counter0 }} # 表示当前是第几次循环,从0开始
{{ forloop,revcounter }} # 表示当前是第几次循环,倒数,到1停止
{{ forloop.revcounter0 }} # 帮签当前第几次循环,倒数,到0停止
{{ forloop.first }} # 是否是第一个,布尔值
{{ forloop.last }} # 是否是最后一个,布尔值
过滤器
过滤器作用是在变量输出时,对输出的变量值做进一步的处理,也就是将不需要的数据过滤或修改,留下需要的数据或修改后的数据。
常用的过滤器有:
过滤器 | 说明 |
---|---|
length | 获取变量的长度 |
lower/upper | 将字符串转换为小写/大写形式 |
first/last | 获取变量的首个/末尾元素 |
add:n | 给变量值增加 n |
safe | 默认不对变量内的字符串进行html转义 |
cut | 从给定的字符串中删除指定的值 |
dictsort/dictsortreversed | 获取字典列表,并返回按参数中给定键排序的列表 |
join | 用字符串连接列表 |
truncatewords | 当字符串字符多于指定的字符数量,那么会被截断。 截断的字符串将以可翻译的省略号序列(“…”)结尾 |
default | 默认值,当变量为空时,用默认值替代变量 |
date | 对日期进行转换 |
过滤器的语法格式如下:
{{ 变量 | 过滤器1:参数值1 | 过滤器2:参数值2 ... }}
在index.html文件中添加如下示例代码:
<p> 名字长度 : {{ name | length }}</p>
<p> 名字首字母大写 : {{ name | first | upper }}</p>
<p> 名字尾字母大写 : {{ name | last | upper }}</p>
<p> 年龄+1 : {{ age | add:1 }} </p>
<p> 个人信息code :{{ code | safe }} </p>
<p> 名字删除字符h : {{ name | cut:'h' }}</p>
<p> 朋友按年龄顺序排序 : {{ friend | dictsort:'age' }}
<p> 朋友按年龄倒序排序 : {{ friend | dictsortreversed:'age' }}</p>
<p> 用、号连接爱好 : {{ likes | join:'、' }}</p>
<p> 截取名字两个字符数量 : {{ likes | truncatewords:2 }}</p>
<p> 性别默认值 : {{ gender | default:'男' }}</p>
<p> 日期转换 : {{ dt | date:'Y-m-d' }}</p>
访问http://127.0.0.1:8000/index/如下:
好了,Django框架——模版就学习到这里,下篇文章我们学习Django框架——模型。
公众号:白巧克力LIN
该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器等相关文章!
- END -