Django基础入门⑤:模板变量和标签的使用

这篇具有很好参考价值的文章主要介绍了Django基础入门⑤:模板变量和标签的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人
🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读!
🎁🎁:文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。


模板变量使用

Django基础入门⑤:模板变量和标签的使用

📑📑模板变量是指在模板中使用的变量,它们通常是从视图函数中传递过来的

📌Django 模板语言的语法主要分为以下四个部分:

  • 变量
  • 标签
  • 过滤器
  • 注释

模板变量

  • 前面的内容中我们提到了模板变量,并且已经使用了它,如{{name}}。

  • Django模板引擎通过上下文处理器来完成字典提供的值(value)

  • 与模板变量之间的替换,也就是用字典的 vaule来替换模板文件 xxxx.html 中的变量 {{name}},这就好比字典中 key 到
    vaule 的映射。而我们无需关心内部细节是如何让实现的,这些由 Django 框架自己完成。

  • 变量的命名规范

Django对于模板变量的命名规范没有太多的要求,可以使用任何字母、数字和下划线的组合来命名,且必须以字母或下划线开头,但是变量名称中不能有空格或者标点符号。

  • 模板变量的语法

📑 如何理解模板的变量语法,其实它有四种不同的使用场景,分别如下所示:

  • 索引 index 查询,如 {{变量名.index}},其中 index 为int类型即索引下标
  • 字典查询方法,{{变量名.key}} 其中 key 代表字典的键,如 a[‘b’]
  • 属性或方法查询,如 {{对象.方法}} ,把圆点前的内容理解成一个对象,把圆点后的内容理解为对象里面的属性或者方法
  • 函数调用,如 {{函数名}}。

📑下面我们对上面的语法依次进行说明,首先在views.py中添加如下代码:

def test_hello():
  return '我是函数的返回数据'


class WebSite:
  def web_name(self):
      return 'Hello world!'


def test_html(request):
  a = {'name': 'xxx',
       'list_obj': ["Python", "C", "C++", "Java"],
       'dict_obj': {'name': '百度', 'address': 'https://www.baidu.com/'},
       'func': test_hello,
       'class_obj': WebSite()}  # 创建空字典,模板必须以字典的形式进行传参
  return render(request, 'test_html.html', a)

📑 其次在templates 目录下创建名为 test_html 的 html 文件,然后添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <p>名字是{{ name }}</p>
  <p>列表数据是{{ list_obj }}</p>
  <p>课程是{{ list_obj.0 }}</p>
  <p>变量dict_obj是{{ dict_obj }}</p>
  <p>dict_obj['address']是{{dict_obj.address}}</p>
  <p>函数fuction:{{ func }}</p>
  <p>类实例化对象:{{class_obj.web_name}}</p>
</body>
</html>

📑 然后在 urls.py 文件中添加路由配置,如下所示:

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


urlpatterns = [
  path('test_html/', views.test_html)
]

📑 接下来访问指定的路由路径就可以访问到页面了。

  • 📌模板传参语法格式

📑 在视图函数中必须将变量封装到字典中才允许传递到模板上,语法格式如下:

#方式1
def xxx_view(request)
    dic = {
        "变量1":"值1",
        "变量2":"值2",
    }
    return render(request, 'xxx.html', dic)

#方式2
def xxx_view(request)
        变量1=1
        变量2=2
    return render(request, 'xxx.html', locals())

📌注意:

locals() 返回当前函数作用域内全部局部变量形成的字典。

	即将变量与值对应形成字典,并把这个字典作为 locals() 的返回值来使用。

模板标签

Django 内置了许多标签用于简化模板的开发过程,同时 Django 也支持自定义标签,这极大的方便了 Web开发者,下面我们依次进行介绍。

📑Django 的模板系统对标签的解释是在渲染的过程中提供相应的逻辑,比如Python 语言中 if…else 语句、with 语句、以及 for 循环等,这些在 Django 的模板系统中都有对应的标签,不过稍微复杂些。

📌它们的使用方式如下所示

{% tag %}

if标签

我们知道if 在 Python 语言中是判断条件是否成立的,在模板标签中它们作用是类似的,如果条件成立则显示块中的内容。

📑模板标签规定了 if 需要与 endif 成对出现 ,使用的方式如下所示:

{% if 条件表达式1 %}
 ......
{% elif 条件表达式2 %}
......
{% elif 条件表达式3 %}
......
{% else %}
......
{% endif %}  # if的结束

上面的 if 示例中就是使用了开始标签和结束标签,它们分别写在了开始位置和结束位置。

📌注意:模板标签内部的两边空格不要省略。

📑那 if 标签具体又是如何使用的呢,下面我们通过一个简单的例子来看一下:

#在views.py 中添加如下代码
def test_if(request):
    dic={'x':2**4}
    return render(request,'test_if.html',dic)

📑在 templates 目录中创建 test_if.html 文件 ,并在body中添加以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% if x > 0 %}
        <h2>{{ x }}是大于0的</h2>
    {% elif x == 0 %}
        <h3>{{ x }}是等于0的</h3>
    {% elif x < 0 %}
        <h4>{{ x }}是小于0的</h4>
    {% endif %}
</body>
</html>

📑最后在 urls.py 文件中配置路由如下所示:

path('test_if/',views.test_if)

从上面例子还可以看出,在 if 标签中可以使用算术操作符,如 >、<、==、<= 等符号,同时也可以使用逻辑运算符 and、or来连接多个条件,以及使用 not 对当前条件取反。

📌注意:elif 和 else 这两个标签是可选的,elif 标签可以不止一个,但是 else 标签只有一个,同时也可以都不出现在 if 标签中,只使用 if 与 endif。

📑如果当判断的条件太多时,为了避免过多的连接操作符的出现,同样可以考虑使用嵌套的 if 标签。

格式如下所示:

{% if 条件表达式1 %}
      {% if 条件表达式2 %}
       ......
      {% elif 条件表达式3 %}
       ......
      {% else %}
       ......
      {% endif %}
{% endif %}

📑在这里我们介绍另外一种方式来简单的演示如何使用嵌套 if 标签,在 views.py 文件中添加如下代码:

from django.template import Template, Context #调用template、以及上下文处理器方法
def Hello_MyWeb(request):
      #调用template()方法生成模板
      t = Template("""
                        {% if web.name == 'xx' %}
                              {% if printable %}
                                    <h1>Hello xx</h1>
                              {% else %}
                                    <h2>欢迎您下次访问,xx</h2>
                              {% endif %}
                        {% endif %}
                                      """)
      c = Context({'web': {'name': 'xx'}, 'printable': True})  #Context必须是字典类型的对象,用来给模板传递数据
      html = t.render(c)
      return HttpResponse(html)

📑然后我们在 urls.py 文件中为 hello_MyWeb() 函数配置路由映射关系,如下所示:

path('Hello_MyWeb/',views.Hello_MyWeb)

以上讲解了 Django 模板标签中的 if 标签的使用方法。在学习的过程一定要懂得融会贯通 ,因为 Django 是基于 Python 的Web 框架,它纵然有自己的特点,但是万变不离其宗,所以学会结合 Python 语言去学习会有利我们快速理解与掌握相关的知识。

for标签

for 标签用于对可迭代对象进行遍历,包括列表、元组等,它与 Python 中的 for 语法是类似的。for 标签 使用时也需要和 endfor 标签配合使用,当然它也有不同之处,那就是它多了一个可选的 empty 标签,比如用它来显示当列表不存在或者列表中元素为空的时候要显示的内容。

它的使用格式如下:

{% for 变量 in 可迭代对象 %}
    ... 循环语句
{% empty %}
    ... 可迭代对象无数据时填充的语句
{% endfor %}

📑我们通过一个具体的实例来看一下它的用法,在 views.py 中添加如下代码:

def test_for(request):
      #调用template()方法生成模板
      t1 = Template("""
                    {% for item in list %}
                        <li>{{ item }}</li>
                    {% empty %}
                        <h1>如果找不到你想要,可以来百度(网址:https://www.baidu.com)</h1>
                    {% endfor %}
                              """)
      #调用 Context()方法
      c1 = Context({'list': ['Python', 'Java', 'C', 'Javascript', 'C++']})
      html = t1.render(c1)
      return HttpResponse(html)

并配置路由映射关系,如下所示:

path('test_for/',views.test_for)

📌提示:与 Python 中的 for 循环不同的是,for 标签只能一次性地遍历完列表中的元素,不能中断(break),也不能跳过(continue)

forloop变量

在 for 标签还提供了内置变量forloop,我们可以访问这个变量的属性从而获取 for 循环迭代过程中的一些信息,比如forloop.first,它的返回值是一个布尔值,当 for 循环迭代第一个元素的时候返回 True, 若有其余元素则返回的是False。

forloop 的属性主要有以下几个:

变量 描述
forloop.counter 用来计数,查看当前迭代第几个元素(从1开始索引)
forloop.revcounter 表示当前循环中剩余的未被迭代的元素数量(从1开始索引)
forloop.first 如果当前迭代的是第一个元素,则为True
forloop.last 如果当前迭代的是最后一个元素,则为True
forloop.parentloop 在嵌套循环中,用来引用外层循环的 forloop

实例说明如下所示:

def test_forloop(request):
    a = Template("""
     {% for item in lists %}
     <div>
        <p><b>{{ forloop.counter }}:{{ item }}</b></p>
     </div>
     {% endfor %}
     """)
    b = Context({'lists': ['c语言', 'Django官网', 'Pytho官网']})
    html = a.render(b)
    return HttpResponse(html)  # 数字与元素以 1:'c语言' 的形式出现

路由映射关系,如下所示:

path('test_forloop/', views.test_forloop),

下面是一些演示示例:

forloop.revcounter 示例

forloop.revcounter 表示当前循环中剩余的未被迭代的元素数量(从1开始索引)

{% for num in numbers %}
  {{ num }} ({{ forloop.revcounter }} left)
{% endfor %}

假设 numbers 列表包含 [2, 4, 6, 8, 10],则渲染结果为:

2 (5 left)
4 (4 left)
6 (3 left)
8 (2 left)
10 (1 left)

forloop.first 和 forloop.last 示例

forloop.first 如果当前迭代的是第一个元素,则为True

forloop.last 如果当前迭代的是最后一个元素

{% for i in list1 %}
        
        {% if forloop.first %}
            <p>通过forloop.first 获取到第一个参数{{ i }}</p>
        {% elif forloop.last %}
            <p>通过forloop.last 获取到最后一个参数{{ i }}</p>
        {% else %}
            <p>{{ i }} 的计数是 {{ forloop.counter }} ,后面未被迭代的数据为 {{ forloop.revcounter }} </p>
        {% endif %}
        
    {% empty %}
        <p>列表中没有数据</p>
    {% endfor %}

forloop.parentloop 示例

forloop.parentloop在嵌套循环中,用来引用外层循环的 forloop

{% for category in categories %}
  <h2>{{ category.name }}</h2>
  {% if category.products %}
    <ul>
      {% for product in category.products %}
        <li>{{ product.name }}</li>
      {% endfor %}
    </ul>
  {% endif %}
{% endfor %}

假设 categories列表包含两个对象,每个对象包含一个名称属性和一个产品列表属性。渲染结果将输出每个类别的产品列表,最后还要输出类别的总数。

在内部循环中,我们可以使用forloop.parentloop引用外部循环上下文,在这里它允许我们检查是否在迭代列表内的最后一个元素,以便在所有类别都遍历完后输出总数。文章来源地址https://www.toymoban.com/news/detail-489136.html

到了这里,关于Django基础入门⑤:模板变量和标签的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git基础命令,分支,标签的使用【快速入门Git】

    创建仓库 命令 说明 git init 初始化仓库 git clone 克隆远程仓库 提交与修改 命令 说明 git add 添加文件到暂存区 git status 查看仓库当前的状态,显示有变更的文件 git diff 比较文件的不同,即暂存区和工作区的差异 git commit 提交暂存区到本地仓库 git reset 回退版本 git rm 将文件从暂

    2024年02月20日
    浏览(37)
  • Django基础4——模板系统

    概念: Django模板系统,用于自动渲染一个文本文件,一般用于HTML页面。模板引擎渲染的最终HTML内容返回给客户端浏览器。 模板文件有两部分组成: 静态部分,例如html、css、js 动态部分,django模板语言,类似于jinja语法 Django中的变量: 在函数视图render中的context传入,类似

    2024年02月11日
    浏览(40)
  • Django学习笔记-模板(Template)基础

    使用模块可以很方便的执行一些数据操作,然后根据传入的数据直接在模板html文件中进行处理。 Django的模板引擎在sttings.py文件中: Django模板引擎中使用“{% %}”来描述python语句,使用“{{ }}”来描述变量,常用语句示例说明如下: 标签 说明 {% extends \\\"模板名\\\" %} 扩展一个母模

    2024年02月15日
    浏览(37)
  • ECSHOP模板系统控制标签使用介绍

    ECSHOP模板系统控制标签介绍说明,本文将为您介绍ecshop中基本的控制函数标签的使用参数和方法,其中包括if标签、foreach标签、for标签等,其实Smarty 中的 if 语句和 php 中的 if 语句一样灵活易用,并增加了几个特性以适宜模板引擎, if必须于/if 成对出现. 可以使用 else 和 els

    2023年04月16日
    浏览(36)
  • django中模板的使用

    在项目的同层级下 新建模板文件夹 index.html 方式一 方式二 data的数据会放到index,html 要想使用 需要{{key}}

    2024年02月11日
    浏览(34)
  • 帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法

    本文讲述了帝国CMS专题调用标签eshowzt不支持标签模板使用程序代码的解决方法。涉及针对帝国CMS源码的修改。分享给大家供大家参考,具体如下: 一、问题: 在项目开发中需要在首页调用专题,且专题增加了“专题自定义字段”:副标题(ftitle),需要在栏目名调用出比较

    2023年04月20日
    浏览(48)
  • Django学习(二) 之 模板的使用

    昨晚应该是睡的最好一天吧,最近一个月睡眠好差,睡不着不说,而且半夜总醒,搞的我第二天就会超没精神。 昨天下午去姐姐家,我刚进屋,小外甥直接就问我说: 老舅,你都很长时间没来啦,**(前女友)哪去了, 我们都好久没出溜溜了! 我顿了下说,她不喜欢我们了,

    2024年02月05日
    浏览(34)
  • 【Django入门系列】Django基础

    在本章中,我们将学习Django的基础知识,包括创建第一个Django项目、Django项目的组织结构、模型-视图-控制器(MVC)设计模式、Django中的URL和路由以及Django的模板语言。 首先,我们需要安装Django并创建一个新的Django项目。请按照以下步骤操作: 使用以下命令安装Django: 创建

    2024年02月11日
    浏览(42)
  • 【D02】Bootstrap免费精选模板推荐,附上Django中使用模板教程

    今天介绍一款制作精良、开源、免费的 Bootstrap 模板 —— Anchor UI KIT 该模板使用的是Bootstrap v4版本 本文将介绍如何在Django中导入该模板的静态资源包并使用 Anchor - a free Bootstrap UI Kit (bootcss.com) 进入文档Docs后,可以看到 文件结构 和 组件HTML代码 等等。 点击导航栏右侧 Downlo

    2023年04月13日
    浏览(33)
  • Django基础入门⑧:Django路由详细讲解

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 路由分发函数

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包