当前位置: 首页 > article >正文

第一章(四):Django框架的模板(DTL):变量、标签、模板过滤器、模板继承、配置模板文件(staticfiles)

系列文章目录

备注:这里是Django系列文章的所有文章的目录

第一章(一) : Django框架如何创建项目、创建应用、创建templates;如何启动django项目;
第一章(二):Django框架的模式、路由、视图;
第一章(三):Django框架的视图函数、视图类的认识及常规使用;
Django框架(七):django之模板变量、Template类、Context类、深度变量查找、filter过滤、控制语句if、for循环


备注:欢迎查阅python之Django框架,如有疑问,欢迎评论,一定回复!!!

文章目录

  • 系列文章目录
  • 前言
  • 一 . 模板变量
    • 1.1 . 模板变量的类型
    • 1.2 . 模板变量的应用:{{ 变量名 }}
      • 1.2.1 . 变量使用实例
      • 1.2.2 . 变量使用实例-效果释义
  • 二 . 模板标签
    • 2.1 . 常见标签
      • 2.2.1 . for循环标签的`标签变量`
      • 2.2.2 . 标签的使用:以for循环标签为例
      • 2.2.3 . 2.2.2的效果释义


前言

提示:这里可以添加本文要记录的大概内容:
Django的模板包含:动态部分、静态部分。动态部分即是Django的模板语言DTL,静态部分即是HTML、CSS、JavaScript。
模板语言主要是:模板变量、模板标签、模板过滤器。


提示:以下是本篇文章正文内容,如有疑问,欢迎评论中指出,定在一周内予以回复。

一 . 模板变量

模板变量可以被看作是HTML文件中的占位符。当Django模板引擎执行时,会用模板变量实际的值对其进行替换。

1.1 . 模板变量的类型

模板变量:字符串、列表、字典、类对象

1.2 . 模板变量的应用:{{ 变量名 }}

注意:变量名前后都有空格,变量名可以由字母数字下划线组成,但不能包含空格和其它字符

1.2.1 . 变量使用实例

app中views.py的视图函数:

def var(request):
    '''
    变量的使用
    :param request:
    :return:
    '''
    lists = ['java', 'python', 'C', 'C#', 'JavaScript']
    dicts = {'姓名': "张三", "年龄": 25, "性别": '男'}
    return render(request, 'var.html', {'lists': lists, 'dicts': dicts})
    # return render(request, 'var.html', locals())

templates中,变量的引用:

<body>
    {{ lists }}
    <table border=1>
        <tr>
            <td>{{ lists.0 }}</td>
            <td>{{ lists.1 }}</td>
            <td>{{ lists.2 }}</td>
            <td>{{ lists.3 }}</td>
            <td>{{ lists.4 }}</td>
        </tr>
    </table>
<br>
    {{ dicts }}
    <table border=1>
        <tr>
            <td>{{ dicts.姓名 }}</td>
            <td>{{ dicts.年龄 }}</td>
            <td>{{ dicts.性别 }}</td>
        </tr>
    </table>
</body>

urls.py中,路由:

urlpatterns = [
    path('var/', views.var, name='app3_var'),
]

1.2.2 . 变量使用实例-效果释义

  • 1.2.1 中,视图函数中,render()所返回的数据的名称,一定是要和templates中{{ 变量名 }}一致;
  • 当变量是list/dict/对象时,引用其内部值:{{ list.索引 }}、{{ dict.keys }}
  • 访问路由,页面展示:
    变量的引用

二 . 模板标签

模板标签的需要使用**标签限定符{% %}**进行包裹。
标签的作用:载入代码渲染模板,或者对传入的参数进行逻辑判断和计算。

2.1 . 常见标签

模板标签描述
{% if %}{% elif %}{% else%}{% endif %}条件判断模板标签
{% for %} {% empty %} {% endfor %}循环模板标签
{% url %}路由配置的地址标签
{% extends xx%}模板继承标签,从xx模板继承
{% load %}加载相关内容
{% static %}静态资源
{% block %}{% endblock %}一组占位符标签,需要重写模板
{% csrf_token %}用来防护跨站点伪造攻击
{% include 页面 %}包含一个HTML页面

2.2.1 . for循环标签的标签变量

变量描述
forloop.counter0表示当前循环的索引,从0开始计数
forloop.counter表示当前循环的索引,从1开始计数
forloop.revcounter0表示循环中剩余元素的数量,在进行第1次循环时 forloop.revcounter0的值是循环的序列中元素总数减去1,最后一次时,为0
forloop.revcounter表示循环中剩余元素的数量,在进行第1次循环时 forloop.revcounter的值是循环的序列中元素总数,最后一次时,为1
forloop.first表示是否是第1次循环
forloop.last表示是否是最后1次循环
forloop.parentloop嵌套循环中,获取上层的for循环

2.2.2 . 标签的使用:以for循环标签为例

扩展:Django框架(七):django之模板之变量、Template类、Context类、深度变量查找、filter过滤、控制语句if、for循环
步骤一:在app3的views.py文件中,编写for_label函数

def for_label(request):
    '''
    标签的使用,以for循环为例
    :param request:
    :return:
    '''
    dict1 = {'书名': 'Django开发', '价格': 80, '作者': '张三'}
    dict2 = {'书名': 'Python开发', '价格': 100, '作者': '李四'}
    dict3 = {'书名': 'C#开发', '价格': 101, '作者': '王二'}
    list1 = [dict1, dict2, dict3]
    return render(request, 'for_label.html', {'lists': list1})

步骤二:在templates中,添加for_label.html,内容包含:

    <table border="1">
        {% for li in lists %}
            {% if forloop.first %}<!--如果是第一条记录-->
                <tr>
                <td>第一条记录:{{ li.书名 }}</td>
                </tr>
            {% endif %}
            <tr>
            <td>当前值:{{ li.书名 }},价格:{{ li.价格 }},当前正序索引{{ forloop.counter0 }},
                当前倒序索引{{ forloop.revcounter0 }}
            </td>
            </tr>
            {% if forloop.last %}<!--如果是最后一条记录-->
                <tr>
                <td>最后一个值:{{ li.书名 }}</td>
                </tr>
            {% endif %}
        {% endfor %}
    </table>

步骤三:在app3的路由url.py中,添加:

from django.urls import path, re_path
from app3 import views

urlpatterns = [
	……
    path('for_label/', views.for_label, name='app3_for_label'),
	……
]

2.2.3 . 2.2.2的效果释义

在这里插入图片描述

提示:这里对文章进行总结:


http://www.kler.cn/a/17611.html

相关文章:

  • SpringBoot(十八)SpringBoot集成Minio
  • 基于RK3568J多网口电力可信物联网关解决方案
  • JAVA:探索 EasyExcel 的技术指南
  • 【MySQL 保姆级教学】事务的隔离级别(详细)--下(13)
  • 【mysql】使用宝塔面板在云服务器上安装MySQL数据库并实现远程连接
  • 2024-11-13 学习人工智能的Day26 sklearn(2)
  • B树(B-tree、B-树)理论详解
  • SPSS如何进行方差分析之案例实训?
  • 蓝牙耳机哪款性价比高一些?2023年性价比最高的蓝牙耳机推荐
  • 一、spring Cloud Alibaba概述
  • No.046<软考>《(高项)备考大全》【专项2】《案例分析 - 计算题(中)》
  • API接口的应用
  • 高性能定时器--时间轮/多级时间轮
  • 用于无线传感器网络路由的改进leach协议(Matlab代码实现)
  • 06_Uboot顶层Makefile分析_前期所做内容
  • C++之异常处理
  • 国民技术N32G430开发笔记(15)- IAP升级 树莓派串口发送数据
  • 如何搭建chatGPT4.0模型-国内如何用chatGPT4.0
  • C语言将汉字保存到文件中
  • 如何显示文件夹的后缀和隐藏文件
  • 一分钟学会Flask框架的安装与快速使用
  • 诺派克ROPEX热封控制器维修RES-407/RES-406
  • 设计模式-创建型模式-(工厂、简单工厂、抽象工厂)
  • 有必要给孩子买台灯吗?分享四款高品质的护眼台灯
  • 处理 json 和 HttpMessageConverter--文件下载-ResponseEntity --SpringMVC 文件上传
  • 组态软件对比,未来10年发展趋势!