在之前,视图函数只是返回一个简单的文本。而在实际开发环境中很少这样用。因为实际的页面大多是带有样式的html代码,这可以让浏览器渲染出非常漂亮的页面。目前市面上有非常多的模板系统,其中最知名最好用的就是DTL和jinjia2,DTL是django Template Language三个单词的缩写,也就是django自带的模板语言。当然也可以配置django支持的jinjia2等其他模板引擎,但是作为内置的模板语言,和Django可以达到无缝衔接而不会产生一些不兼容的情况。
DTL与HTML文件的区别:
DTL模板是一种带有特殊语法的HTML文件,这个HTML文件可以被Djiano内置模板编译,可以传递参数进去,实现数据动态化,在编译完成后,生成一个普通的HTML文件,然后发送给客户端。
渲染模板
渲染模板有多种方式,下面说两种:p
1.render_to_string:找到模板,然后将模板编译后渲染成python的字符串格式。最后再通过HttpResponse类包装成一个HttpResponse对象返回回去。示例代码:
from django.template.loader import render_to_string def index(request): html = render_to_string(‘index.html‘) retutn Httpresponse(html)
2.以上方式虽然很方便了,但是django还提供了一个更加简便的方式,直接将模板渲染成字符串并包装成HttpResponse对象一步到位完成。示例代码:
from django。shortcuts import render def index(resquest): return render(request,‘index.html‘)
模板查找路径
在项目的setting.py文件中,有一个TEMPLATES配置,这个配置包含了模板引擎的配置(backend),模板查找路径(Dirs),模板上下文的配置等。模板路径可以再两个地方配置
1.DIRS:这是一个列表,在这个列表中可以存放所有的模板路径,以后再视图中使用render或者render_to_string渲染模板的时候,会在这个列表的路径中查找模板。
2.APP_DIRS:默认为true,这个设置为true后,会在INSTALLED_APPS的安装了的app下的templates文件中查找模板。注意是**templates**
3.查找顺序,比如代码render(‘index.html‘),说先会在DIRS这个列表中一次查找路径下有没有这个模板,如果有,就返回,如果DIRS列表中所有的路径都没有找到,那么会先检查当前这个视图所处的app是否已经安装,如果已经安装了,那么就现在当前这个app下的templates文件夹中查找模板,如果没有找到,那么会在其他已经安装了的app中查找。如果都没有找到,会抛出一个TemplatesDonesNotExist的异常
原文地址:https://www.cnblogs.com/nihao2/p/12073715.html