django模板语法

Posted chichung

tags:

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

前言:django的模板语法基本和flask的jinja2基本一样。下面比较一下两个模板语法的区别。

1.模板变量

django:{{  变量  }}    # 因为django只有一个context返回,全部数据都集中在一起

jinja2:{{  对象.变量  }}

2.根据列表的下标获取值

django:{{  列表.0  }}

jinja2:{{  列表[0]  }}

3.根据字典的键获取字典的值

django:{{  字典.key  }}

jinja2:{{  字典[key]  }}或者{{  字典.key  }}

4.for循环时取序号

django:
{% for item in 列表 %} {{forloop.counter}} <1-- 表示当前是第几次循环,从1开始 --> {{forloop.counter0}} <!-- 表示当前是第几次循环,从0开始 -->

{% endfor %}

jinja2:
{% for item in 列表 %} {{loop.index}} <1-- 表示当前是第几次循环,从1开始 --> {{loop.index0}} <!-- 表示当前是第几次循环,从0开始 -->

{% endfor %}

5.列表为空时执行逻辑

django:
{% for item in 列表 %} {{forloop.counter}} <1-- 表示当前是第几次循环,从1开始 --> {{forloop.counter0}} <!-- 表示当前是第几次循环,从0开始 --> {% empty %} 列表为空或不存在时执行此逻辑 {% endfor %}

jinja2:无

6.运算符之间的空格

django:{% if a==1 %}  # 错误

      {% if a == 1 %}  # 正确

jinja2:两种都可以

7.过滤器

django:变量|过滤器:参数

jinja2:变量 | 过滤器(参数)    常见的jinja2过滤器:https://www.cnblogs.com/chichung/p/9775099.html

django的常见几个过滤器如下:

  • safe,禁用html转义(显示html标签样式,而不是字符串)
  • length,长度,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
  • default,默认值,如果变量不存在时则返回默认值。

    data|default:‘默认值‘
    
  • date,日期,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:

    • Y表示年,格式为4位,y表示两位的年。
    • m表示月,格式为01,02,12等。
    • d表示日, 格式为01,02等。
    • j表示日,格式为1,2等。
    • H表示时,24进制,h表示12进制的时。
    • i表示分,为0-59。
    • s表示秒,为0-59。
    value|date:"Y年m月j日  H时i分s秒"

8.多行注释

django:

{% comment %}
...
{% endcomment %}

9.对有需要的block进行重写

django:

  • 不用重写父模版中的所有block,如果子模版没有重写,则使用父模版定义的默认值。
  • 可以使用 block.super 来包含父模板的块中定义的内容,如下

{% block 名称 %}
      子模板的内容
      {{ block.super }}    显示父模板中block的内容
{% endblock %}

{{ block.super }}——引用上级代码块在其基础上进行一些修改

flask:

同样原理,不过用的是{{  super()  }}











以上是关于django模板语法的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 片段在 Django 模板中不起作用

每当我将 Python 代码放入 Django 模板时都会出现语法错误

django 源码模板的语法符号的使用

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?

django模板语法

Django 模板过滤器语法错误