13.Django中几大常用模板标签讲解及实战使用 【for循环;if判断;页面跳转;开启关闭自动转义;url携带参数传递;注释】

1,673 阅读5分钟

1.常用模板标签

(1)模板标签重要概念:

①定义:标签在渲染的过程中提供任意的逻辑。

②标签语法: 由 {% 和 %} 来定义的,例如:{%tag%} {%endtag%}

(2)常用模板标签讲解及实战使用:

第一个——模板标签中的for循环!

引言:假设我们现在有个需求是——后端视图函数从数据库中获取了需要渲染在前端页面的数组(为一个列表类型的数据)。   我们如何一条条渲染显示在前端页面中,类似于报纸上那种!     这就可以用到模板标签中的——for循环简单模拟实现!

①视图函数views.py文件:

(假设列表li就是从数据库中得到的数据!)

def test01(request):
    li=["第一条数据", "第二条数据", "第三条数据", "第四条数据", "第五条数据", "第六条数据","第七条数据", "第八条数据",]
    return render(request,"test02.html",context={"li":li})

②对应的前端模板文件test02.html:

(在此模板中使用模板标签中的for循环!)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        p{
            width: 100px;
            color: aqua;
            height: 40px;
            line-height: 40px;
            background-color: skyblue;
        }
    </style>
</head>
<body>

{#如果直接使用模板变量这样是列表形式在前端显示:#}
{{ li }}

{#使用模板标签中的for循环遍历之后就可以对其进行排版和设置样式了:#}
<div>
    {% for foo in li %}
        <p>{{ foo }}</p>		{#foo是循环出来的每一条数据!#}
    {% endfor %}
</div>

</body>
</html>

③效果展示:

在这里插入图片描述

第二个——模板标签中的if判断!

引言:比如你在访问一个网站时,如果你未登录,网页某个地方会显示【注册 登录】;而如果你登录了又会显示欢迎某某某。   这样的效果该如何实现呢?     其实我们就可以通过模板标签中的——if判断简单模拟实现!

①视图函数views.py文件:

(视图函数中设置一个变量b,值为True则模拟用户已登录;否则为未登录状态!)

def test01(request):
    b=True
    return render(request,"test02.html",context={"b":b})

②对应的前端模板文件test02.html:

(在此模板中使用模板标签中的for循环!)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{#简单模拟用户浏览网站时,如果登录的话显示用户名;如果未登录的话显示【注册 登录】。#}
{% if b %}
    <div>欢迎小明</div>
{% elif b == "123" %}		{#只是演示下如何进行多重判断,在此处无实际用处!#}
    啊哈
{% else %}
    <div>注册 登录</div>
{% endif %}

</body>
</html>

③前端实现: 在这里插入图片描述

第三个——模板标签中的页面跳转!

引言:本部分来探讨探讨纯前端技术实现页面跳转和使用模板标签进行页面跳转的不同效果!

①music应用下的urls.py文件:

(在这里我们可以给相应的url路径取个name属性值,这个值是唯一的!!!)

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [     #子路由
    path('test01/',views.test01),
    path('sing/',views.sing,{"name":"小明","age":18},name="bb"),
]

②对应的前端模板文件test02.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{#第一个例子——看看如何跳转到首页:http://127.0.0.1:8888 #}
{#第一种方法:#}
<a href="http://127.0.0.1:8888">首页1</a>      {# 这样写带来的问题:如果直接写首页路径,今后万一咱的域名或者端口号改变了,那么所有跳转的都要跟着一个个改,太麻烦啦! #}
{#第二种方法:      完美解决第一种方法带来的问题!#}
<a href="/">首页2</a>                            {# 这种方法就避免了刚刚说的情况!  /代表的就是当前的ip地址加端口号:http://127.0.0.1:8888 #}



{#第二个例子——看看如何跳转到带有路径的界面:http://127.0.0.1:8888/music/sing/ #}
{#第一种方法 #}
<a href="http://127.0.0.1:8888/music/sing/">跳转1</a>      {# 这样也可能会出现上面第一个例子中第一个方法带来的问题! #}
{#第二种方法 #}
<a href="/music/sing">跳转2</a>                             {# 这样不会出现刚刚说的那种情况,但是如果咱对应url的路径进行了改变,也会产生与刚刚类似的情况#}

{#第三种方法:  究极方法——使用模板标签!   不管域名、端口或者路径如何改变,对应路径的name值不变就不需要改变,完美解决上述所有问题!!!#}
<a href="{% url 'bb' %}">跳转3</a>		 {#通过url的name属性值跳转到对应的页面!#}

</body>
</html>

第四个——模板标签中如何批量让html标签在前端中生效!

引言:现在有个问题是我们视图函数传递给前端大量需要生效的带有Html标签的数据,并且需要它们在前端展示的位置也各不相同,十分零散。  我们该怎么做呢?   很多人可能想到了之前说的过滤器,但是要知道的是过滤器一下只能让一个生效。这工作量也太大了吧!    所以这时候模板标签闪亮登场——让我们来看看模板标签中如何解决这种问题!

①视图函数views.py文件:

def test01(request):
    html1='<h1>拉拉</h1>'
    html2='<h1>拉拉</h1>'
    html3='<h1>拉拉</h1>'
    html4='<h1>拉拉</h1>'
    return render(request,"test02.html",context={"h1":html1,"h2":html2,"h3":html3,"h4":html4})

②对应的前端模板文件test02.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{#如果我们使用过滤器的话,那么一次只能识别一个,如果数量非常多的话,工作量就太大了!#}
{{ h1|safe }}

{#所以模板标签为我们解决了这个问题,不管需要识别的html标签的有多少个,位置分的有多散,只要将其包裹在下面的两行代码之内,都可让其在前端中生效!#}
{% autoescape off %}
	{{ h1 }}
	{{ h2 }}
	{{ h3 }}
{% endautoescape %}

</body>
</html>

第五个——模板标签中的url携带参数传递!

引言:现在有个问题是——在上面我们可以通过模板标签实现页面跳转。但是如果我们需要跳转的页面url需要携带参数呢?   是不是傻眼了!下面来看看如何实现哦!

(前面通过转换器可以实现借由url进行参数传递;现在模板标签也可以进行参数传递!)

①假设有如下路径:

path('test/<int:id>/', views.test,name='test'),

②模板标签中的url携带参数传递:

<a href="{% url 'test' 123 %}">url携带参数传递</a>

第六个——模板标签中的注释!

{# 注释标签 && 单行注释 #}
{% comment %}
被注释的内容
多行注释
{% endcomment %}