• Django笔记&教程 3-3 模板常用语法


    Django 自学笔记兼学习教程第3章第3节——模板常用语法
    点击查看教程总目录

    本文主要参考:https://docs.djangoproject.com/en/2.2/ref/templates/builtins/

    模板语法的四种结构中,Comments(注释)结构都是固定的,没有什么其他的变化和方法。
    所以这里介绍下其他三种结构的各种用法。

    1 Variables(变量)

    该结构基础用法为

    {{ variable}}
    

    python为面向对象语言,所以程序里也会有各种对象,该结构中获取变量对象的某种属性的值和python的写法一样

    {{ object.attritube }}
    

    这里有一个需要特别介绍的,就是该结构中如何使用变量对象的某种方法:
    该结构中只能使用变量对象无需传参的方法。
    该结构中调用变量对象的方法时,不要在方法名后加括号()
    举例如下

    class A:
    	def valid_method(self):
    		return "It's a valild method"
    
    	def invalid_method(self, param):
    		return "It's an invalild method because it has a redundant param"
    

    上面是一个名为A的类,其第一个方法是可以在该结构中调用的
    调用方法如下,其中aA的一个实例

    {{ a.valid_method}}
    

    该调用语句会再html中生成的对应文本为"It's a valild method"

    第二个方法则是不可以在该结构中调用的,因为它包含一个参数param,该语法结构中无法调入需要传参的方法。
    类方法中self是类对象本身,所以不算做参数。

    拓展介绍
    上面我们展示了点这个操作符: .(dot operator)在模板中可以获取对象属性或者调用对象的方法。
    不过具体的实际情况比这要复杂一些。
    从技术上讲,当模板系统遇到一个点时,它会先后尝试用以下方式来理解.这个点操作符并执行相应的查找:

    • 字典的键查找
    • 属性或者方法名查找
    • (列表之类的)数字索引查找

    比如这样的代码:

    {{ a.b }}
    

    具体执行时,会

    • 先看a是不是字典类似的对象,有没有叫做b的键(key),有则返回对应的值(value)
    • 然后看a这个对象有没有b这个属性(有则返回属性值),或者方法(有则调用方法,返回执行方法后的返回值)
    • 最后看a是不是类似于列表的对象,有没有数字索引为b的,有则返回对应的元素值

    同时由于有三种查找方式,有可能会导致冲突,第三种一般不会和其他两种冲突。
    第一种和第二种有可能冲突,即字典键和字典对象本身具有的属性名或者方法名重名时,会导致后者无法获取到,所以要避免这种重名。
    详细官方文档: ref/templates/language/#variables

    2 常用Tags

    url: 调整url写法

    返回与给定视图和可选参数匹配的绝对路径引用(不带域名的URL)。

    <a href="/register/">register</a>
    

    统一改为通过urls.py里面指定的urlpattern的name来访问

    <a href="{% url 'register' %}">register</a>
    

    好处:如果有url修改的话,只需要改一次urlpattern,不用去把所有有url的地方都修改一遍
    更多信息:https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#url

    for: 循环

    循环遍历数组中的每个项,使该项在上下文变量中可用。
    写法: (一定要用endfor结尾)

    {% for obj in obj_list%}
    	...
    {% endfor %}
    

    示例

    <ul>
    {% for athlete in athlete_list %}
        <li>{{ athlete.name }}</li>
    {% endfor %}
    </ul>
    
    if: 条件判断

    {% if %}标签计算一个变量,如果该变量为“true”(即存在,不为空,不为false boolean值),则输出块的内容:
    写法: (一定要用endif结尾)

    {% if boolean_a %}
    ...
    {% elif boolean_b % }
    ...
    {% else %}
    ...
    {% endif %}
    

    示例

    {% if athlete_list %}
        Number of athletes: {{ athlete_list|length }}
    {% elif athlete_in_locker_room_list %}
        Athletes should be out of the locker room soon!
    {% else %}
        No athletes.
    {% endif %}
    
    其他常用Tags及用法将在后续相关章节中介绍

    模板继承: blockendblockextends
    模板加载静态文件(css或图片): load static

    3 常用Filters

    TODO: Filters感觉新手基本用不到(或者不习惯去用),未来本小部分可能会放在一个拓展小节中去讲。

  • 相关阅读:
    第三周学习进度总结
    第二周学习进度总结
    动手动脑04
    动手动脑03
    动手动脑02
    课堂实践总结
    课堂实践
    原码,反码和补码学习报告
    开学第一周
    第八周
  • 原文地址:https://www.cnblogs.com/BigShuang/p/14285584.html
Copyright © 2020-2023  润新知