一、Django 模板系统
1.1.模板系统是什么
用于自动渲染一个文本文件,一般用于HTML页面。模板引擎渲染的最终HTML内容返回给客户端浏览器
模板文件有两部分组成:
• 静态部分,例如html、css、js
• 动态部分,django模板语言,类似于jinja语法
1.2.变量
1.2.1.介绍
变量定义:在函数视图render中的context传入,类似于字典对象。
变量在模板中引用,格式:{{ key }}
1.2.2.示例
views.py:
def template(request):
user_info = {"name": "运维@小兵", "property": {"sex": "男", "age": 30}}
return render(request, 'template.html', {"user_info": user_info})
template.html:
<body>
<h1>模板演示</h1>
用户名: {{ user_info.name }}<br>
性别: {{ user_info.property.sex }}<br>
年龄: {{ user_info.property.age }}
</body>
效果:
1.2.3.设置全局变量
在devops项目目录下创建contexts.py文件
def user(request):
# username = request.session.get('username')
username = "devops"
return {'username': username}
在settings.py文件中添加你的上下文处理器
在任意模板均可使用该变量
当前登录用户为:{{ username }}
1.3.标签
1.3.1.条件判断
if条件判断:判定给定的条件是否满足(True或False),根据判断的结果决定执行的语句。
语法:
{% if <表达式> %}
<内容块>
{% elif <表达式> %}
<内容块>
{% else %}
<内容块>
{% endif %}
相等执行内容块
{% ifequal <值1> <值2> %}
<内容块>
{% endifequal %}
不相等执行内容块
{% ifnotequal <值1> <值2> %}
<内容块>
{% endifnotequal %}
1.3.2.操作符
1.3.3.循环
for循环:一般用于遍历数据类型的元素进行处理,例如列表
语法:
{% for <变量> in <序列> %}
<内容块>
{% endfor %}
1.3.4.forloop变量
forloop是在{% for %}标签中生成的变量,用于获取当前循环进展信息
测试forloop<br>
{% for i in alist %}
编号:{{ forloop.counter }},值:{{ i }}<br>
{% endfor %}
1.3.5.for empty
for…empty 当循环的序列为空时,执行empty下面的内容。
语法:
{% for <变量> in <序列> %}
<遍历>
{% empty %}
<代码块>
{% endfor %}
1.3.6.注释
{# 注释内容 #}
1.4.常用过滤器
在变量被显示前修改值的一种方法。
语法:{{ value | 过滤器:参数 }}
1.5.自定义过滤器
安装myapp
在myapp下创建templatetags目录,并在templatetags创建空脚本__init__.py和filters.py
from django.template import Library
register = Library() # 注册过滤器对象
@register.filter # 通过装饰注册自定义过滤器
def func(n):
return n / 2
在模板中使用
加载自定义过滤器
过滤器演示:{{ 200 | func }}
1.6.模板继承
模板继承主要是为了提高代码重用,减轻开发人员的工作量。
典型应用:网站的头部、尾部信息。
1.6.1.定义一个基础模板,也称为母板,这个页面存放整个网站共用的内容
templates/base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %} {% endblock %}</title>
</head>
<body>
<nav class="nav">
<a href="#">仪表盘</a>
<a href="#">发布管理</a>
<a href="#">容器管理</a>
</nav>
<div class="context">
{% block context %} 预留区域 {% endblock %}
</div>
<footer class="footer">
底部
</footer>
</body>
1.6.2.创建子模板about.html继承模板
{% extends 'base.html' %}
{% block title %} 演示模板继承 {% endblock %}
{% block context %} 这是about网页 {% endblock %}
1.7.模板导入
导入一个模板(一般是某个网页功能)到当前模板
1.7.1.创建一个hello.html的模板
<div style="background-color: red; width: 100px; height: 100px">
这是一个功能模板
</div>
1.7.2.导入模板
{% extends 'base.html' %}
{% block context %}
这是about网页
{% include 'hello.html' %}
{% endblock %}
1.8.引用静态文件
1.8.1.在devops下创建static目录,并在static目录下创建main.css文件
main.css
.test {
color: red;
}
1.8.2.在settings.py配置
• STATICFILES_DIRS:告诉Django哪个目录是“静态文件的文件夹”
• STATIC_ROOT:指出浏览器访问静态文件“根路径”
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
1.8.3.在模板文件引用静态文件
<link rel="stylesheet" href="/static/main.css">
或者
{% load static %}
<link rel="stylesheet" href="{% static 'main.css' %}">