渲染模板
渲染模板有多种方式,通常使用下面两种:
render_to_string
: 找到模板,然后将末班编译后渲染成python字符串格式,最后再通过HttpResponse类包装成一个HttpResponse对象返回回去。实例代码如下:
from django.http import HttpResponse
from django.template.loader import render_to_string
def index(request):
html = render_to_string("index.html")
return HttpResponse(html)
- Django提供更简便的方式,直接将模板渲染字符串和包装成HttpResponse对象一步到位,实例代码如下:
from django.shortcuts import render
render_to_string
def index(request):
return render(request, "index.html")
模板查找路径
在项目的settings.py
文件中,有一个TEMPLATES配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。模板路径可以在两个地方配置。
DTRS
: 这个列表存放所有的模板路径,以后在视图中使用render或者render_to_string渲染模板的时候,会在这个列表的路径中查找模板APP_DTRS
:设置为True,会在INSTALLD_APPS的安装了的app下的Templates文件中查找模板- 查找循序 DIRS >–检查当前视图所处的app是否安装,如果安装查找当前app的Templates文件中查找模板,如何没有则会在其他安装的app中查找;如果都没有就会抛出异常
模板变量
- 在模板中使用变量,需要将变量放到
{{变量 }}
中。 - 如果想要访问对象的属性,那么可以通过
对象.属性名
来访问。
def shouye(request):
p = Person("战士")
context = {
'person': p
}
return render(request, "shouye.html", context=context)
## html
{{ person.username }}
- 访问字典的key对应的value,那么通过
字典.key
- 想要访问列表或者元祖,通过
对象.下标
的方式进行访问,不能通过[]
。
常用的模板标签
if标签
- 所有的标签都在
{% %}
之间 - if标签有闭合标签,
{% endif %}
- if标签的判断运算符和python的判断运算符一样
- 可以使用
elif
以及else
等标签
for标签
- forloop.counter: 默认从1开始,如果想从0开始forloop.counter0
- forloop.revcounter : 当前循环的反向下标值,如果想让最后一个下标值为0则写forloop.revcounter0
- forloop.first: 是否是第一次遍历
- forloop.last: 是否是最后一次遍历
- for…in…empty:在遍历的对象如果没有元素的情况下会执行empty中的内容。
whith标签
- 在模板中,想要定义变量,可以通过
with
语句来实现。 with
语句块有两种使用方式,第一种是with xx=xxx
的形式,第二种是with xxx as xx
的形式- 定义的变量只能在with语句块中使用
url标签
<a href="{% url 'book' %}">读书</a>
autoescape标签
verbatim标签
常用过滤器
add过滤器
{{ value1|add:value2 }}
cut过滤器
{{value|cut:"" }}
date过滤器
{{ brithday|date:"Y/m/d" }}