templates模板文件

templates 该目录本身没有,如果我们需要使用,需要我们自己创建,该目录名通常为templates

1、创建位置:

1.直接在应用下创建该目录,应用下的html模板,能直接在应用下的views中使用,一般也只给自己的应用使用

2.直接在项目下创建该目录,在项目下创建的改目录,所有的应用中的views都可以方便的使用

 3.若果是项目下的templates目录,需要配置才可以使用

 配置:1.在setting的TEMPLATES中配置

             'DIRS': [os.path.join(BASE_DIR,'templates')],


                      2.项目不能识别templates为模板目录,需要将该目录标记成模板目录才可以使用
                         标记:  templates目录右键 ---- mark Directory  as ---- template Folder看到目录变成紫色即可

注:如果遇到template不能识别,重新做以上操作

2、模板语法

1、变量

           1.变量通常在views中定义,然后传递给模板,模板中直接使用就可以
           2.使用变量: {{ 变量名 }}    用两个大括号括起来
           3.注意: 如果模板板中的变量没有定义就使用了, 模板不会报错,当作空使用

2、语法

1、“.”语法

1.1、 . 可以用来调用属性 
          格式:  对象名.属性名  
1.2.、.  可以用来调用方法
         格式: 对象名.方法名    注意不加()
1.3、如果. 用在集合(list,tuple...)的 后面,可以连接索引, 可以获取索引位置的值 
         格式: 集合.索引    相当于python的:  集合[索引]
1.4、如果 . 用在字典的后面, 可以连接 可以,可以获取key对应的值
        格式: 字典.key    相当于python的:  字典[key]

2、for语句

2.1、for 循环

     {% for 变量名 in 集合名%}

       循环体

      {% endfor %}

2.2、

        {% for 变量名 in 集合名 %}
          循环体
        {% empty %}
           如果集合为空,应该显示的内容
        {% endfor %}

2.3、forloop  循环的技术器
       forloop.counter  从1开始计数
       forloop.counter0  从0开始计数
       forloop.first  是否是第一个数据
       forloop.last  是否是最后一个数据
       forloop.revcounter  从1开始计数, 倒着计数,即最大数是第一个
       forloop.revcounter0  从0开始计数, 倒着计数,即最大数是第一个

3、判断语句

3.1、if语句
       {% if 判断表达式1 %}
                如果满足条件1就执行表达式1
       {% elif 判断表达式2 %}
                    如果满足条件2就执行表达式2 
        {% else %}    
                   否则执行表达式3
        {% endif %}

 注:elif与else可以省略

3.2、判断2个值是否相等

{% ifequal valu1 value2 %}
         如果value1 等于value2执行表达式

{% endifequal %}
注意: 当value1与value2值相等,且类型也一样的时候才成立

3.3、比较运算符

>    <    >=    <=     ==    !=

比较运算符可用在if语句中作判断使用

4、运算方法

4.1、加法/减法  {% 值1|add值2 %}    值1 + 值2    注:当值2为负数时,即为减法

4.2、乘法/除法  {% widthratio value 分母 分子 %}    注:格式为: value * 分子 / 分母

4.3、整除   格式:{{ value|divisibleby:值  }}    value是否能整除 值

4.4、大小写转换 
         转换成小写:{{ value|lower }}
         转换成大写:{{ value|upper }}

4.5、字符串拼接: {{ 集合|join:"拼接的字符" }}

5、转义字符

5.1、在模板中  使用{{ 变量|safe }}    是得变量的字符串中的html标签生效

5.2、使用 autoescape 
  ①    {% autoescape on %}
          {#     这里面的内容就是不生效的HTML字符串#}
          {{ strHtml }}
          {% endautoescape %}

   ②   {% autoescape off %}
          {#     这里面的内容就是可以生效的HTML字符串#}
          {{ 变量 }}                                                                                                                                                                                              {% endautoescape %}

6、模板的继承

6.1、继承

在子模板首行写入{% extends '父模板路基' %} ,即可继承父模板

例:

6.2、在父模板中为子模板预留位置

6.2.1、在父模板中预留位置

在需要填充子模板内容的地方 写上 :

{% block 坑的名字  %}

    父模板可在此写入内容

{% endblock %}

6.2.2、在子模板中将数据填入预留的位置

{% block 坑的名字  %}

       填充的内容

{% endblock %}

注:子模板填充内容会将父模板的内容覆盖

6.2.3、在子模板填充内容的同时希望保留父模板的内容

在填充内容的首行加上 {{ block.super }}

例:{% block head %}
            {{ block.super }}
            <h1>xxxx</h1>
         {% endblock %}

6.3、将多个分散的html使用include合并成一个完整的html

格式:{% include 'html文件' %}

例:将head.html、body.html、foot.html三个html文件合并

head.html

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

bady.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div style="height: 200px; width: 200px; background: pink">
    身子
</div>
</body>
</html>

foot.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    这是臭脚丫子
</body>
</html>

将三者合并:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{#    将零散的html拼接成一个完整的html #}
    {% include 'head.html' %}
    {% include 'bannar.html' %}
    {% include 'foot.html' %}
</body>
</html>

效果图:

7、模板的简单加载原理
模板的加载过程
def loadTem(request):
   # 7.1、先将模板加载到views函数中
    template = loader.get_template("HTML文件")
    # 7.2、把数据给模板,并转换成html形式的字符串
    htmlData = template.render(context={"content":"内容xxxxxx"})
    # 7.3、把数据作为相应体,给客户端   html本质就是字符串
     return  HttpResponse(htmlData)

猜你喜欢

转载自blog.csdn.net/pyrans/article/details/82693168