Django中templates的使用

1、templates用来放置模板文件

1、templates 该目录本身没有,如果我们需要使用,需要我们自己创建,该目录名通常为templates
2、创建位置:
    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
    看到目录变成紫色即可
    4、如果遇到template不能识别,重新做以上操作

2、模板语法

1、变量

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

2、 . 语法

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

3、for循环

注意:有结束标签 {% endif %}

1、格式1:

{% for 变量名 in 集合名 %}
    循环体
{% endfor %}

2、格式2:

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

3、forloop 循环的计数器

forloop.first   是否是第一个数据
forloop.last    是否是最后一个数据
forloop.counter 从1开始计数
forloop.counter0    从0开始计数
forloop.revcounter  从1开始计数,倒着计数,即最大数是第一个
forloop.revcounter0 从0开始计数,倒着计数,即最大数是第一个

4、判断语句

1、格式1:

{% if判断表达式 %}
    如果满足条件就执行表达式
{% endif %}

2、格式2:

{% if判断表达式 %}
    如果满足条件就执行表达式
    {% else %}
        否则执行表达式2
{% endif %}

3、格式3

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

4、格式4:判断两个值是否相等

{% ifequal value1 value2 %}
    如果value1等于value2执行表达式
{% endifequal %}
注意:当value1与value2值相等,且类型也一样的时候才成立

5、格式5:判断两个值是否不相等

{% ifnotequal value1 value2 %}
    如果value不等于value2执行表达式
{% endifnotequal %}

5、比较运算符

>   大于
<   小于
>=  大于等于
<=  小于等于
==  等于(类型也要一直)
!=  不等于
**表示范围的语法结果一般有结果标签,一般是{% %}

6、注释:

{# 这是模板语法中的单行注释   快捷键:ctrl + / #}

{% comment %}
    这是多行注释  快捷键:ctrl+shift+/
{% endcomment %}

<!-- 这是HTML注释 -->
这种注释方法在控制台可见,一般不要使用

7、其他

1、加法/减法运算

加法:格式{{ value|add:值 }}  value 值
减法:格式{{ value|add:值}}  value -值

2、乘法/除法运算

格式:{% widthratio value 分母 分子%}
    相当于 value * 分子/分母
除法 {% widthratio value 分母 1 %}
乘法 {% widthratio value 1 分子 %}

3、是否整除某个数

格式:{{ value|divisbleby:值 }}  value是否能整除值
需求:隔行换色
{% for student in allStudent %}
    {% if forloop.counter0|divisibleby:2 %}
        <li style="color: red">{{ student.s_name }}</li>
        {% else %}
        <li style="color: green">{{ student.s_name }}</li>
    {% endif %}
{% endfor %}

4、大小写转换

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

5、字符串拼接

字符串拼接:{{ 集合|join:'拼接的字符'}}

8、转义字符

问题:默认情况下,如果views视图函数传递给模板的是一个html格式的字符串,默认模板中的html标签不会生锈,而有时候需要html标签生效

使标签生效

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

9、模板的继承

子模板可以继承一个父模板,即可以继承父模板的css/html/js

1、如何继承

1、定义一个父模板base.html,通常在父模板写一些通用的功能
2、定义一个子模板index.html,在子模板的首行写{% extends 'base.heml'%},就可以继承父模板中的所有css/html/js

2、block

在继承中可以block来在父模板中挖坑,挖坑可以给子类内容设置一个预留位置,方便子类在对应的位置填充内容

1、在父类中挖坑

在需要填充子模板内容的地方写上:
{% block 坑的名字 %}

{% ednblock%}

2、在子类中填坑

{% block 坑的名字 %}
    填充内容
{% endblock %}

3、填坑保留父模板内容

可以在填坑的首行加上{{ block.super }}
如:{% block head %}
        {{ block.super }}
        <h1>这是三级头</h1>
    {% ednblock %}

注意

可以挖多个坑
填坑的时候不需要按照顺序
没有填的坑,就是空内容

3、思想

1、化整为零

将一个完整的html用block划分成很多的小块,开发者只需要考虑填充对应的小模块即可

2、化零为整

将多个零散的html用include在一个html中包含进来,可以拼接成一个完整的html
将零散的html拼接成一个完整的html
{% include 'head.html' %}
{% include 'banner.html' %}
{% include 'foot.html' %}

10、模板的简单加载原理

模板的加载过程
def loadTem(request):
    1、先将模板加载到views函数中
    template = loader.get_template('loadTem.html')
    2、把数据给模板,并转换成html形式的字符串
    htmlData = template.render(context = {'content':'内容'})
    3、把数据作为相应体,给客户端  html的本质就是字符串
    return HttpResponse(htmlData)

猜你喜欢

转载自blog.csdn.net/EverXerxes/article/details/82693381
今日推荐