Django框架——模版

在上篇文章中我们学习了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 -

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白巧克力LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值