模板
在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带有样式的HTML代码,这可以让浏览器渲染出非常漂亮的页面。目前市面上有非常多的模板系统,其中最知名最好用的就是DTL和Jinja2。 DTL 是 Django Template Language 三个单词的缩写,也就是Django自带的模板语言。当然也可以配置Django支持Jinja2等其他模板引擎,但是作为Django内置的模板语言,和Django可以达到无缝衔接而不会产生一些不兼容的情况。因此建议大家学习好DTL。
DTL与普通的HTML文件的区别:
DTL模板是一种带有特殊语法的HTML文件,这个HTML文件可以被Django编译,可以传递参数进去,实现数据动态化。在编译完成后,生成一个普通的HTML文件,然后发送给客户端。
渲染模板:
渲染模板有多种方式。这里讲下两种常用的方式。
- render_to_string :找到模板,然后将模板编译后渲染成Python的字符串格式。最后再通过 HttpResponse 类包装成一个 HttpResponse 对象返回回去。示例代码如下:
from django.template.loader import render_to_string
from django.http import HttpResponse
def book_detail(request,book_id):
html = render_to_string("detail.html")
return HttpResponse(html)
- 以上方式虽然已经很方便了。但是django还提供了一个更加简便的方式,直接将模板渲染成字符串和包装成 HttpResponse 对象一步到位完成。示例代码如下:
from django.shortcuts import render
def book_list(request):
return render(request,'list.html')
模板查找路径配置:
在项目的settings.py
文件中。有一个 TEMPLATES
配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。模板路径可以在两个地方配置。
- DIRS :这是一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用 render 或者 render_to_string 渲染模板的时候,会在这个列表的路径中查找模板。
- APP_DIRS :默认为
True
,这个设置为True
后,会在INSTALLED_APPS
的安装了的 APP 下的templates
文件加中查找模板。 - 查找顺序:比如代码
render('list.html')
。先会在DIRS
这个列表中依次查找路径下有没有这个模板,如果有,就返回。如果DIRS
列表中所有的路径都没有找到,那么会先检查当前这个视图所处的app
是否已经安装,如果已经安装了,那么就先在当前这个app
下的templates
文件夹中查找模板,如果没有找到,那么会在其他已经安装了的app
中查找。如果所有路径下都没有找到,那么会抛出一个TemplateDoesNotExist
的异常
模板的变量
- 在模板中使用变量,需要将变量放到
{{ 变量 }}
。 - 如果想要访问对象的属性,那么可以通过
对象.属性名
来进行访问。 - 如果想要访问一个字典的key对应的value,那么只能通过
字典.key
的方式进行访问,不能通过中括号[]
的形式进行访问。 - 因为在访问字典的
key
时候也是使用点.
来访问,因此不能在字典中定义字典本身就有的属性名当做key
,否则字典的那个属性将变成字典中的key了。
context = {
'persons': {
'username':'zhiliao',
'keys': '阿珂'
}
}
- 如果想要访问列表或者元组,那么也是通过
点.
的方式进行访问,不能通过中括号[]
的形式进行访问。这一点和python中是不一样的。示例代码如下:
{{ persons.0 }}