# 第一节:模板介绍
# 模板
在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带有样式的HTML代码,这可以让浏览器渲染出非常漂亮的页面。目前市面上有非常多的模板系统,其中最知名最好用的就是DTL和Jinja2。`DTL`是`Django Template Language`三个单词的缩写,也就是Django自带的模板语言。当然也可以配置Django支持Jinja2等其他模板引擎,但是作为Django内置的模板语言,和Django可以达到无缝衔接而不会产生一些不兼容的情况。因此建议大家学习好DTL。
## DTL与普通的HTML文件的区别:
DTL模板是一种带有特殊语法的HTML文件,这个HTML文件可以被Django编译,可以传递参数进去,实现数据动态化。在编译完成后,生成一个普通的HTML文件,然后发送给客户端。
## 渲染模板:
渲染模板有多种方式。这里讲下两种常用的方式。
1. `render_to_string`:找到模板,然后将模板编译后渲染成Python的字符串格式。最后再通过`HttpResponse`类包装成一个`HttpResponse`对象返回回去。示例代码如下:
```
<pre class="calibre12">```
<span class="hljs-keyword">from</span> django.template.loader <span class="hljs-keyword">import</span> render_to_string
<span class="hljs-keyword">from</span> django.http <span class="hljs-keyword">import</span> HttpResponse
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">book_detail</span><span class="hljs-params">(request,book_id)</span>:</span>
html = render_to_string(<span class="hljs-string">"detail.html"</span>)
<span class="hljs-keyword">return</span> HttpResponse(html)
```
```
2. 以上方式虽然已经很方便了。但是django还提供了一个更加简便的方式,直接将模板渲染成字符串和包装成`HttpResponse`对象一步到位完成。示例代码如下:
```
<pre class="calibre12">```
<span class="hljs-keyword">from</span> django.shortcuts <span class="hljs-keyword">import</span> render
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">book_list</span><span class="hljs-params">(request)</span>:</span>
<span class="hljs-keyword">return</span> render(request,<span class="hljs-string">'list.html'</span>)
```
```
## 模板查找路径配置:
在项目的`settings.py`文件中。有一个`TEMPLATES`配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。模板路径可以在两个地方配置。
1. `DIRS`:这是一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用`render`或者`render_to_string`渲染模板的时候,会在这个列表的路径中查找模板。
2. `APP_DIRS`:默认为`True`,这个设置为`True`后,会在`INSTALLED_APPS`的安装了的`APP`下的`templates`文件加中查找模板。
3. 查找顺序:比如代码`render('list.html')`。先会在`DIRS`这个列表中依次查找路径下有没有这个模板,如果有,就返回。如果`DIRS`列表中所有的路径都没有找到,那么会先检查当前这个视图所处的`app`是否已经安装,如果已经安装了,那么就先在当前这个`app`下的`templates`文件夹中查找模板,如果没有找到,那么会在其他已经安装了的`app`中查找。如果所有路径下都没有找到,那么会抛出一个`TemplateDoesNotExist`的异常。
- Introduction
- 第一章:学前准备
- 第一节:虚拟环境
- 第二节:准备工作
- 第三节:Django介绍
- 第四节:URL组成部分
- 第二章:URL与视图
- 第一节:第一个Django项目
- 第二节:视图与URL分发器
- 第三章:模板
- 第一节:模板介绍
- 第二节:模板变量
- 第三节:常用标签
- 第四节:常用过滤器
- 第五节:自定义过滤器
- 第七节:模版结构优化
- 第八节:加载静态文件
- 第四章:数据库
- 第一节:MySQL相关软件
- 第二节:数据库操作
- 第三节:ORM模型
- 第四节:模型常用字段
- 第五节:外键和表关系
- 第六节:增删改查操作
- 第七节:查询操作
- 第八节:QuerySet API
- 第九节:ORM模型迁移
- 第十节:ORM作业
- 第十一节:ORM作业参考答案
- 第十二节:Pycharm连接数据库
- 第五章:视图高级
- 第一节:限制请求method
- 第二节:页面重定向
- 第三节:HttpRequest对象
- 第四节:HttpResponse对象
- 第五节:生成CSV文件
- 第六节:类视图
- 第七节:错误处理
- 第六章:表单
- 第一节:表单概述
- 第二节:用表单验证数据
- 第三节:ModelForm
- 第四节:文件上传
- 第七章:cookie和session
- 第八章:上下文处理器和中间件
- 第一节:上下文处理器
- 第二节:中间件
- 第九章:安全
- 第一节:CSRF攻击
- 第二节:XSS攻击
- 第三节:点击劫持攻击
- 第四节:SQL注入
- 第十章:信号
- 第一节:什么是信号
- 第十一章:验证和授权
- 第一节:概述
- 第二节:用户对象
- 第三节:权限和分组
- 第十二章:Admin系统
- 第十三章:Django的缓存
- 第十四章:memcached
- 第十五章:Redis