模板
什么是模板
- 模板就是要动态呈现给用户的网页
- 模板的本质就是网页- 前后端,动静结合的网页
- Django的模板引擎是由Django自己提供的,并不是
Jinja2
,所以Django的模板语法与Flask(Jinja2)
的语法会有一些不同
模板的设置
在 settings.py
中有一个 TEMPLATES
变量
-
BACKEND
:指定使用的模板的引擎 -
DIRS
:指定模板的存放目录们- 如果写东西:则按照写好的路径去找模板
- 如果未写东西:那么Django会自动的到每个应用中搜索一个叫
templates
的目录来作为模板的存放目录
-
APP_DIRS
: 是否自动搜索应用中的目录-
True
:表示搜索应用中的templates
的目录
-
模板的加载方式
- 通过
loader
对象获取模板,再通过HttpResponse
进行响应
from django.template import loader
def xxViews(request):
# 通过 loader 加载模板
t = loader.get_template("模板名称")
# 将模板渲染成字符串
html = t.render()
# 将字符串通过HttpResponse响应给客户端
return HttpResponse(html)
- 使用
render
直接加载并响应模板
def xxViews(request):
return render(request,'模板的名称')
模板的语法
变量
- 将后端的数据传递给模板进行显示
- 在Django中允许作为变量传递给模板的数据类型:字符串,整数,列表,元组,字典,函数,对象
- 变量必须要封装到字典中才能传递给模板
- 在模板中使用变量:
{{变量名}}
# 使用 loader 加载模板
dic = {
'变量名1':'值1',
'变量名2':'值2',
}
t = loader.get_template('xxx.html')
html = t.render(locals() 或 dic)
return HttpResponse(html)
# 使用 render 加载并返回模板
dic = {
'变量名1':'值1',
'变量名2':'值2',
}
return render(request,'xx.html',dic)
标签
- 将服务器端的功能嵌入到模板中
- 语法:
{% 标签内容 %}
- 常用标签
-
comment
注释 -
for
循环遍历 列表,字典,元组 -
if
在模板中完成变量的判断操作 - 更多请查看
-
<!-- comment -->
{% comment "Optional note" %} <!-- Optional note 为注释名字,可选 -->
<p>{{comment content}}</p>
{% endcomment %}
<!-- for -->
{% for 变量 in 列表|元组|字典 %}
{% endfor %}
<!--
循环中允许使用 forloop 内置变量来获取循环的信息
forloop.counter : 当前循环遍历的次数
forloop.first : 判断是否为第一次循环
forloop.last : 判断是否为最后一次循环
-->
<!-- if -->
{% if 条件 %}
满足条件时要执行的内容
{% endif %}
<!-- if ... else -->
{% if 条件 %}
满足条件时要执行的内容
{% else %}
不满足条件时要执行的内容
{% endif %}
<!--if ... elif ... else -->
{% if 条件1 %}
满足条件1时要执行的内容
{% elif 条件2 %}
或满足条件2时要执行的内容
{% elif 条件3 %}
或满足条件3时要执行的内容
{% else %}
或以上条件都不满足时要执行的内容
{% endif %}
过滤器
- 在变量输出显示之前,对变量进行筛选和过滤
- 过滤器的语法:
{{变量|过滤器:参数}}
- 常用过滤器
-
{{value|upper}}
将value变为大写 -
{{value|lower}}
将value变为小写 -
{{value|add:num}}
将num值累加到value之后 -
{{value|floatformat:n}}
将value四舍五入到n位小数 -
{{value|truncatechars:n}}
将value截取保留至n位字符(包含...) - 更多请查看
-
静态文件
在Django中,不被解释器所动态解析的文件就是静态文件
Django中静态文件的处理
在 settings.py
中设置有关静态文件的信息
- 设置静态文件的访问路径
- 在浏览器中通过哪个地址能够找到静态文件
STATIC_URL = '/static/'
- 如果访问路径是
http://localhost:8000/static/...
,那么就到静态文件存储路径中找文件而不走路由(urls.py)
- 设置静态文件的存储路径
- 指定静态文件存储在服务器上的哪个位置处
STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),)
- 静态文件目录的存放位置
在项目的根目录处创建一个static
目录,用于保存静态文件
每个应用中也可以创建一个static
目录,用于保存静态文件
访问静态文件
- 直接使用静态文件访问路径进行访问
http://localhost:8000/static/..
<img src="http://localhost:8000/static/images/a.jpg">
- 使用
{% static %}
访问静态资源
{% static %}
表示的就是静态资源的访问路径- 在模板的最顶层增加
{% load static %}
- 在使用静态资源时
<img src="{% static 'images/a.jpg' %}">
- 在模板的最顶层增加
模板的继承
语法
在父模板中
必须要标识处哪些内容在子模板中允许被修改
# 标签
{% block 名称 %}
# 允许被修改的内容
{% endblock %}
# block的作用:
# 在父模板中正常显示
# 在子模板中,如果不修改的话则按父模板的显示,要是修改的话则按照子模板的内容显示
在子模板中
# 指定继承自哪个父模板
{% extends '父模板名称' %}
# 增加 block 标签,改写属于自己的内容
{% block 名称 %}
# 自己的内容
{% endblock %}
# 父模板的变量不会给继承到子模板
url反向解析
在模板上做反向解析
# 基本解析
{% url '别名' %}
# 带参的解析
{% url '别名' '参数1' '参数2' %}
在视图上做反向解析
# 基本解析
url = reverse('别名') # url 就是通过别名解析出来的地址
# 带参的解析
url = reverse('别名',args=(参数1,参数2)) # url 就是通过别名解析出来的地址
网友评论