Django模板语言(DTL)基础

Posted hycstar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django模板语言(DTL)基础相关的知识,希望对你有一定的参考价值。

## 模板变量
  - 普通变量
    {{ name }}
  - 对象变量(使用点号访问对象属性和方法,方法不加括号)
    {{ person.name }}

 

## 常用模板标签

  # if标签,支持and,or,not和嵌套,不支持括号
    {% if %}{% endif %}
    {% if %}{% elif %}...{% else %}{% endif %}

  # for标签,用法与Python中基本相同
    {% for item in items %}{% endfor %}
    {% for item in items reversed %}{% endfor %} # 反向迭代
    {% for k, v in data.items %}{% endfor %}


    {% for item in items %}     #相当于:if items:
      语句一                     for item in items:
    {% empty %}                  语句一
      语句二               else:
    {% endfor %}                 语句二

    - 在for标签中自带forloop对象
      - forloop.counter 从1开始计数
        {% for item in items %}
          {{ forloop.counter }}: {{ item }}
      - forloop.counter0 从0开始计数
      - forloop.revcounter 逆向计数,最后一个数是1
      - forloop.revcounter0 逆向计数,最后一个数是0
      - forloop.first 布尔值,第一次循环时为True
      - forloop.last 布尔值,最后一次循环时为True
      - forloop.parentloop 引用父级循环的forloop对象

 

  # 相等判断(x, y可以是变量,字符串,整数,小数,变量不需要加{{}},字符串可以是单/双引号引起的硬编码,但列表、字典、布尔值不能硬编码,可以使用标签变量赋值,并且同样支持{% else %}标签)
    {% ifequal x y %}{% endifequal %}
    {% ifnotequal x y %}{% endifnotequal %}

 

  # 注释
    {# 单行注释 #}
    {% comment %}
      多行注释
    {% endcomment %}

 

## 过滤器(Python中关于字符串方法基本适用)
  {{ name|lower }} 全小写
  {{ name|upper }} 全大写
  {{ name|title }} 首字母大写
  {{ users_list|first }} 第一个元素
  {{ users_list|last }} 最后一个元素
  {{ sentence|truncatewords:"5" }} 字符串截断,以空格区分(所以中文无效),取前五个单词,多余的词用...省略,数字必须放在双引号内
  {{ sentence|slice:"4" }} 字符串切分,可以用于中文,多余的词没有任何标识
  {{ sentence|addslashes}} 在反斜线,单引号,双引号前面加一个斜线,可用于转义字符串
  {{ birthday|data:"F j, y" }} 格式化date或datatime对象,双引号内也可以是 DATE_FORMAT、DATETIME_FORMAT、SHORT_DATE_FORMAT 或 SHORT_DATE-TIME_FORMAT
  {{ word:length }} 返回长度

 

## 模板引用,引用其他模板的全部内容
  {% include url %} # url可以是双引号字符串硬编码,也可以是变量

 

## 模板继承
  - 父模板使用block标签表示可以被子模板修改的块
    {% block block_name %}{% endblock %}
  - 子模板在文件第一行使用extends标签继承父模板,并同样使用block标签修改父模板中的同名块
    {% extends url %}   # url可以是双引号字符串硬编码,也可以是变量
    {% block block_name %} 新的内容 {% endblock %}
  - 继承树中的任何模板都能访问上下文中的每一个模板变量

 

## 使用模板

1 from django.shortcuts import render
2 
3 
4 def home(request):
5     return render(request, "index.html", {"name": "Stanley", "age":"22"})
6      # 第一个参数必须是request,第二个参数是模板路径,第三个参数是模板变量

 

以上是关于Django模板语言(DTL)基础的主要内容,如果未能解决你的问题,请参考以下文章

Django(28)Django模板介绍

Django基础4----Template模板之模板变量

django基础知识之模板:

4.Django-模板介绍

Django 第三课 模板

Django基础,Day10 - template 模板引擎与路径设置