Django框架学习 —9模板详解 -- DTL

  • 作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器
  • 模板致力于表达外观,而不是程序逻辑
  • 模板的设计实现了业务逻辑view与显示内容template的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用
  • 模板包含两部分:
    静态部分,包含html、css、js
    动态部分,就是模板语言
  • Django处理模板分为两个阶段:
    加载:根据给定的路径找到模板文件,编译后放在内存中。
    渲染:使用上下文数据对模板插值并返回生成的字符串。
  • 为减少重复编写加载、渲染的代码,Django提供了简写函数render(),用于调用模板。

Django模板语言(DTL)

  • 定义在django.template包中
  • 模板语言包括4种类型,分别是:模板变量、模板标签、模板过滤器、模板注释
    模板变量
    模板变量的用来显示从服务端传递过来的数据
  • 语法格式:

HTML页面:{{ 变量名 }}
视图处理函数:return render(request, ‘HTML页面’, 字典数据)

  • 变量名,使用字典数据中的键作为变量名
  • 获取不同类型的数据

数字类型:{{ 变量名 }}
字符串类型:{{ 变量名 }}
列表类型:{{ 变量名.下标 }}
字典类型:{{ 变量名.键 }}
对象类型:{{ 变量名.属性 }}

  • 如果变量不存在时,显为空字符串
  • 在模板中可以调用方法,但不能传递参数

实例演练: 将字典值传递给页面

  • 修改urls.py文件:url(r’^temp_var/$’, views.temp_var),
  • 修改views.py文件:
def temp_var(request):
    dict = {'title': '字典键值'}
    book = BookInfo()
    book.btitle = '对象属性'
    context = {'dict': dict, 'book': book}
    return render(request, 'app/temp_var.html', context)
  • 在templates/app目录中添加页面文件temp_var.html
<body>
模板变量:<br/>
{{ dict.title }}<br/>
{{ book.btitle }}<br/>
</body>
  • 在浏览器中查看结果
    在这里插入图片描述

模板标签

语法格式:{% 代码段 %}

  • for标签语法格式:
{% for item in 列表 %}
    循环逻辑
    {{ forloop.counter }}表示当前是第几次循环,从1开始
{% empty %}
    列表为空或不存在时执行此逻辑
{% endfor %}
  • if标签语法格式:
{% if 条件1 %}
    逻辑1
{% elif 条件2 %}
    逻辑2
{% else %}
    逻辑3
{% endif %}
  • 比较运算符:==、!=、<、>、<=、>=
    注意: 运算符左右两侧不能紧挨变量或常量,必须有空格。
  • 逻辑运算符:and、or、not

实例演练: 在页面上显示图书列表

  • 修改urls.py文件:url(r’^temp_book/$’, views.temp_book),

  • 修改views.py文件:

def temp_book(request):
    context = {'list': BookInfo.objects.all()}
    return render(request, 'app/temp_book.html', context)
  • 在templates/app目录中添加页面文件temp_book.html
<body>
图书列表如下:
<ul>
    {% for book in list %}
        {% if book.id <= 2 %}
            <li style="color: red;">{{ book.btitle }}</li>
        {% elif book.id <= 3 %}
            <li style="color: blue;">{{ book.btitle }}</li>
        {% else %}
            <li style="color: green;">{{ book.btitle }}</li>
        {% endif %}
    {% empty %}
        <li>对不起,没有图书</li>
    {% endfor %}
</ul>
</body>
  • 在浏览器中查看结果
    在这里插入图片描述
    模板过滤器
    使用过滤器对变量进行计算、格式转换等操作
  • 语法格式:变量|过滤器:参数
  • 常用过滤器:
    length,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
    default,如果变量不存在时则返回默认值。
    date,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:
    Y表示年,格式为4位,y表示两位的年。
    m表示月,格式为01,02,12等。
    d表示日, 格式为01,02等。
    j表示日,格式为1,2等。
    H表示时,24进制,h表示12进制的时。
    i表示分,为0-59。
    s表示秒,为0-59。

实例演练: 对书名大于4个字符的图书,格式化其出版时间

  • 修改urls.py文件:url(r’^temp_filter/$’, views.temp_filter),

  • 修改views.py文件:

def temp_filter(request):
    context = {'list': BookInfo.objects.all()}
    return render(request, 'app/temp_filter.html', context)
  • 在templates/app目录中添加页面文件temp_filter.html
<body>
图书列表如下:
<ul>
    {% for book in list %}
        {% if book.btitle|length > 4 %}
            <li style="color: red;">
                {{ book.btitle }}
                ---默认时间格式为:
                {{ book.bpub_date }}
            </li>
        {% else %}
            <li style="color: green;">
                {{ book.btitle }}
                ---格式化时间为:
                {{ book.bpub_date|date:"Y-m-j" }}
            </li>
        {% endif %}
    {% endfor %}
</ul>
</body>
  • 在浏览器中查看结果
    在这里插入图片描述

模板注释

  • 在模板中使用如下模板注释,这段代码不会被编译,不会输出到客户端
  • html注释只能注释html内容,不能注释模板语言。
  • 单行注释语法格式:
    {#…#},注释可以包含任何模版代码,有效的或者无效的都可以。
  • 多行注释使用comment标签,语法格式:
    {%comment%}

    {%endcomment%}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值