Django模板层

模板层传输数据

前端可以通过反向解析的方法发送数据到后端

后端可以再返回页面的时候携带数据一并返回

前端语法:
{{}}:主要与数据值相关
{%%}:主要与逻辑相关

前端html文件中可以使用

{{获取到后端传送的数据}}
<p> {{ name }} </p>
<p> {{ age }}  </p>
<P> {{ list.1}} </p>	
针对可以进行索引取值的数据 可以通过.数字的方法进行索引取值

给后端发送数据
<a href="{% url 'a01' '123' %}">点我</a>
# 跳转到 别名为 a01的路由 顺便给这个路由对应的函数 传递参数123



后端python文件中

#方式一:
def login(request):
    name = '张无忌'
    age = 22
    return render(request,'login.html',{'name'=name})
    #精准传值 不浪费资源 针对多资源的传递书写麻烦 优点:不浪费资源 

#方式二:关键词 locals()
def login(request):
    name = '张无忌'
    age = 22
    return render(request,'login.html',locals())
    #将方法中所有的变量名与值全部和html文件一起传送过去
    #优点方便一下传所有  缺点不够精准 浪费资源
    
后端传值特性
   1.基本数据类型都可以传递
   2.对象也可以传 
   3.文件对象也可以展示并调用方法
   4.函数名会自动加括号执行并将返回值展示到页面上(不支持额外传参)
   5.类名也会自动加括号调用
  
ps:总结针对可以加括号调用的名字模板语法都会自动加括号调用

模板层之过滤器

在Django的模板语言中,通过使用 过滤器 来改变变量的显示

使用管道符"|"来应用过滤器


1.{{ name|length }}
返回value的长度,如 name='moon'的话,就显示4.

2.{{ value|filesizeformat }}
如果 value 是 123456789,输出将会是 117.7 MB。
#接收后端返回的文件大小,自动转换为最佳的显示单位

3.{{value|slice:"0:5"}}
对数据进行切片展示 索引0-5

4.{{ value|date:"Y-m-d H:i:s"}}
可以对时间进行格式化展示 '2022-01-19 18:12:23'


5.{{ value|safe}}
后端返回的值为前端标签时 控制是否直接展示

6.{{ value|truncatechars:9}}
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
参数:截断的字符数

7.{{ value|truncatewords:9}}
在一定数量的字后截断字符串。

8.{{ value|cut:' ' }}
移除value中所有的与给出的变量相同的字符串
如果value为'i love you',那么将输出'iloveyou'.

模板层之标签

在django项目中 模板层可以进行 for循环 和 if判断逻辑运算

if,elif和``else

if,elifelse

{% if name == '张无忌' %}
    <P>乾坤大挪移</P>
{% elif name == '周芷若' %}
    <p>九阴白骨爪</p>
{% else %}
    <p>路过....</p>
{% endif %}
# if 变量名name 等于 张无忌的话 执行 <P>乾坤大挪移</P>
#    变量名name 等于 周芷若的话 执行 <P>九阴白骨爪</P>
# 变量名不是张无忌/周芷若 执行 else  <p>路过....</p>


{% if user_list|length > 5 %}
  七座豪华SUV
{% else %}
    黄包车
{% endif %}
# 判断变量名 user_list 列表数量是否 大于5

if语句支持 andor==><!=<=>=innot inisis not判断。

{% with d1.hobby.2.a1 as h %}  复杂数据获取之后需要反复使用可以起别名
        <a href="">{{ h }}</a>
{% endwith %}

for循环

普通for循环

<u1>
{% for user in user_list %}
    <li>{{user.name}}</l1>
{% endfor %}
</u1>

# 使用临时变量user名 遍历 user_list列表,代表列表内每一个用户对象

更多方法

{% for k in t1 %}
        {% if forloop.first %}
            <p>这是我的第一次循环{{ k }}</p>
        {% elif forloop.last %}
            <p>这是我的最后一次循环{{ k }}</p>
        {% else %}
            <p>这是中间循环{{ k }}</p>
        {% endif %}
        
        {% empty %}
            <p>你给我传的数据是空的无法循环取值(空字符串、空列表、空字典)</p>
{% endfor %}


forloop.counter	    当前循环的索引值(从1开始)
forloop.counter0	  当前循环的索引值(从0开始)
forloop.revcounter	当前循环的倒序索引值(从1开始)
forloop.revcounter0	当前循环的倒序索引值(从0开始)
forloop.first	当前循环是不是第一次循环(布尔值)
forloop.last	当前循环是不是最后一次循环(布尔值)
forloop.parentloop	本层循环的外层循环

模板的继承与导入

设置母版

如果我们有很多前端页面长得有很多相似的地方 我们可以采用继承的方法

模板的继承:

1.先确认一个母版 在母版中划分那些是不变的,哪些是可以变的

<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Title</title>
  
  {% block page-css %}
  # 母版设置可以改变的部分 可以设置多个
  # 以 {% block 区域名称 %}开始
  # {% endblock %} 结尾 划分一片可以改变的区域
  {% endblock %}
</head>
<body>

<h1>这是母板的标题</h1>

{% block page-main %}
 # 又是一个可以改变的区域 区域名称为 page-main

{% endblock %}

<h1>母板底部内容</h1>
{% block page-js %}
 # 又是一个可以改变的区域 区域名称为 page-js

{% endblock %}
</body>
</html>


ps:模板中至少应该有三个区域可以改变
    页面内容区、css样式区、js代码区

子板继承母版

新建html文件 不需要任何内容

直接继承母版
{% extends '母版文件名' %}

eg:{% extends 'home.html' %}


然后直接在内容区域编写改变的代码

{% block 母版可修改位置 %}
# 正常母版有3个可以修改的位置

{% endblock %}


ps:模板中至少应该有三个区域
   页面内容区、css样式区、js代码区



posted @   Python-moon  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示