Django框架之模板

Django框架之模板层

什么是模板

需要返回给浏览器的html文件

Django的模板 = HTML代码 + 模板语言

模板语言

有与我们直接返回html页面的话,那他只是一个静态页面无法实现前后端数据交互,那么我们就需要经过页面渲染,让静态文件呈现出动态页面的效果。

模板语言的变量

如果我们需要将后端的数据传递到前端页面渲染,就需要用到模板语言中的变量

用法:通过{{}}来获取后端传递过来的数据

变量支持的数据类型:

  • int
  • float
  • str
  • dict
  • list
  • tuple
  • set
  • bool
  • function
  • class

注:所有的数据类型只支持点取值,并且函数的值时函数的返回值并且不支持函数传值,类显示的是类的内存地址。

模板语言的过滤器

用来把视图传入的变量值加以修饰后再显示{{ 变量名|过滤器名:传递给过滤器的参数 }}

常用过滤器
# default
# 如果一个变量值是False或者为空,使用default后指定的默认值,否则,使用变量本身的值,如果value=''则输出默认的内容
    {{ value|default:"默认内容" }}

# length
# 返回值的长度。它对字符串、列表、字典等容器类型都起作用
    {{ value|length }}

# filesizeformat
# 将值的格式化为一个"人类可读的"文件尺寸变量的默认单位是字节
    {{ value|filesizeformat }}

# date
#作用:将日期按照指定的格式输出
    {{ value|date:"指定格式" }}  

# slice
# 对输出的字符串进行切片操作,顾头不顾尾
    {{ value|slice:"0:2" }} 

# truncatechars
# 显示指定的字符数量,如果大于指定数量,那么会被截断,截断的字符串将以省略号(“...”),并且省略号也占字符数量
    {{ value|truncatechars:8 }}

# truncatewords
# 与truncatechars相同,但truncatewords是按照单词截断,末尾的3个点不算作单词
    {{ value|truncatewords:2 }}

# safe
# 出于安全考虑,Django的模板会对HTML标签、JS等语法标签进行自动转义,交给浏览器后会被解析成普通字符,但如果我们就想让模板变量{{ value }}被渲染的结果有语法意义,那么就用到了过滤器safe
    {{ value|safe }}

模板语法的标签

for标签
# 遍历每一个元素:
{% for li in lis %}
    <p>{{ li }}</p>
{% endfor %}

# 可以利用{% for li in lis reversed %}反向循环。

# 遍历一个字典:
{% for key,val in dic.items %}
    <p>{{ key }}:{{ val }}</p>
{% endfor %}

# 循环序号可以通过{{ forloop }}显示 
forloop.counter            当前循环的索引值(从1开始)
forloop.counter0           当前循环的索引值(从0开始)
forloop.revcounter         当前循环的倒序索引值(从1开始)
forloop.revcounter0        当前循环的倒序索引值(从0开始)
forloop.first              当前循环是第一次循环则返回True,否则返回False
forloop.last               当前循环是最后一次循环则返回True,否则返回False
forloop.parentloop         本层循环的外层循环

# for标签可以带有一个可选的{% empty %} 从句,在变量person_list为空或者没有被找到时,则执行empty子句
{% for li in lis %}
    <p>{{ li }}</p>

    {% empty %}
        <p>lis为空</p>
{% endfor %}
if标签
# 注意:
{% if 条件 %}条件为真时if的子句才会生效,条件也可以是一个变量,if会对变量进行求值,在变量值为空、或者视图没有为其传值的情况下均为False

# 语法
{% if num > 100 or num < 0 %}
    <p>无效成绩</p>
{% elif num > 80 and num < 100 %}
    <p>优秀</p>
{% else %}
    <p>凑活吧</p>
{% endif %}

# if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
with标签
# with标签用来为一个复杂的变量名起别名,如果变量的值来自于数据库,在起别名后只需要使用别名即可,无需每次都向数据库发送请求来重新获取变量的值
{% with li.1.upper as v %}
    {{ v }}
{% endwith %}

自定义过滤器和标签

前提:

  1. 在应用中创建templatetags(只能是这个名称)
  2. 在文件夹中建任意.py文件
  3. 在文件中添加两条语句
    from django import template
    register = template.Library()

然后我们就能够自定义过滤器与标签了

自定义标签
@register.simple_tag
def my_multi_tag(v1, v2): # 自定义的标签可以定义多个参数
    return v1 * v2
自定义过滤器
@register.filter
def my_multi_filter(v1 ,v2): # 自定义的过滤器只能定义最多两个参数
# 针对{{ value1 | 过滤器名称:value2 }},参数传递为v1=value1,v2=value2
    return  v1 * v2

模板的导入和继承

在一个模板文件中,引入或重用另外一个模板文件的内容

模板的导入
{% include '模版名称' %}
模板的继承
{% extends "模版名称" %}
# 也就是说include有的功能extends全都有,但是extends可以搭配一个block标签,用于在继承的基础上定制新的内容

如果要继承模板的内容并定制新内容需要在继承模板中定义定制区域(使用block标签)

原文地址:https://www.cnblogs.com/Gredae/p/11756202.html

时间: 2025-01-12 07:27:30

Django框架之模板的相关文章

八 Django框架,模板语言

模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到html用模板语言渲染 {{...}}接收一个变量或者值进行渲染 逻辑处理 from django.shortcuts import render from app1.models import * #导入数据库操作模块 #逻辑处理模块 def special(request): a = '叫卖录音网' return render(reque

Django框架之模板基础,静态文件配置

一.模板继承 目的是:减少代码的冗余 语法: {% block classinfo %} {% endblock %} 具体步骤: 1.创建一个base.html文件,2.把要显示的页面的内容写在这里面,也就是html要在浏览器显示的内容3.在right里面写个盒子 {% block classinfo %} {% endblock %} 在这里面写个空盒子,以后谁来扩展就在这个盒子里面添加相应的内容就行了 4.然后再创建一个.html文件,让这个继承base.html文件, {% extend

Django框架之模板语法(重要!)

一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 1.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键是句点字符  .(也就是点) views.py def index(request): name = "hello haiyan" i = 200 l = [11,22,33,44,55] d = {"name":"haiyan","age

Django框架 之 模板语言

浏览目录 标签 过滤器 一.标签 Tags 1.普通变量 普通变量用{{ }} 变量名由数字.字母.下划线组成 点.在模板语言中用来获取对象相应的属性值 示例: {# 取variable中的第一个参数 #} {{ variable.0 }} {# 取字典dic中key的值 #} {{ dic.key }} {# 取obj_list对象列表中第一个对象的attr属性值 #} {{ obj_list.0.attr }} {# 点操作只能调用不带参数的方法 #} {{ obj_list.0.metho

Django框架之模板继承和静态文件配置

https://www.cnblogs.com/haiyan123/p/7731959.html 一.模板继承 目的是:减少代码的冗余 语法: {% block classinfo %} {% endblock %} 具体步骤: 1.创建一个base.html文件, 2.把要显示的页面的内容写在这里面,也就是html要在浏览器显示的内容 3.在right里面写个盒子 {% block classinfo %} {% endblock %} 在这里面写个空盒子,以后谁来扩展就在这个盒子里面添加相应

Django框架04 /模板渲染

1. 语法 关于模板渲染需要记两种特殊符号(语法): {{ }}和{% %} 变量相关的用{{}},逻辑相关的用{%%}. 2. 变量 --- 万能的点 在Django的模板语言中按此语法使用:{{ 变量名 }}. 1.当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身. 变量的命名包括任何字母数字以及下划线 ("_")的组合. 变量名称中不能有空格或标点符号. 2.深度查询据点符(.)在模板语言中有特殊的含义.当模版系统遇到点("."),它将以这样的

django框架两个使用模板实例

前言 这篇文章主要介绍了django框架使用模板方法,结合两个具体实例形式详细分析了Django框架模板的相关使用技巧与操作注意事项,需要的朋友可以参考下. 我在这里做一次集中式分享,如果有喜欢的内容,尽管拿去,如果遇到什么问题,请在下面给我留言即可! 本文实例讲述了django框架使用模板.分享给大家供大家参考,具体如下: models.py: from django.db import models # Create your models here. class Book(models.M

Django框架简介及模板Template

Django框架简介 MVC框架和MTV框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),具有耦合性低.重用性高.生命周期成本低等优点. 想要更详细的了解MVC模式? >> 点我 Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性. Django框架的不同之处在于它拆分的三部分为:Model(模型).Templ

Django框架之第三篇模板语法

Django框架之第三篇模板语法(重要!!!) 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键是句点字符  .(也就是点) views.py def index(request): name = "hello haiyan" i = 200 l = [11,22,33,44,55] d = {"name":&quo