Django中模板系统, T层的概念。

   日期:2020-11-09     浏览:165    评论:0    
核心提示:这篇博客介绍了关于django的模板系统,包括模板变量, 模板标签, 模板过滤器,以及自定义过滤器和自定义标签。

这是Django MTV开发模式中的 T模块 —— 模板系统, 作为django的一个非常重要的部分,也是我们学习的一个重要点。

官方定义: 作为一个Web框架,Django需要一种动态生成HTML的便捷方法。最常用的方法依赖于模板。模板包含所需HTML输出的静态部分以及描述动态内容将被插入的一些特殊语法。


这篇文章主要介绍了关于 django 的模板系统 T 层。

工具: pycharm 2020
< django 从入门到 放弃 > 第五篇
沙漏在下雨

文章目录

    • 模板系统:
    • 模板的配置:
    • 模板的加载和响应方式:
    • render() 方式解释:

模板系统:

在 Django 中我们把“模板”称之为 Template,它的存在使得 HTML 和 View 视图层实现了解耦。 在去 前文 MTV 开发模式中我们也提到过 Template,它是设计模式中的 T 层,那么它在 Djang 中又是如何应用的呢?

其实 T 层应用是这样实现,当创建好一个 Django 项目后,我们在项目的同级目录下创建一个名为 templates 文件夹,对它进行简单的配置后,这个文件夹将被 Django 自动识别。我们可以简单的理解为:文件夹就好比我们所说的 T 层,然而其复杂的实现过程由 Django 框架本身来实现的,所以我们无需关心内部细节。

模板的配置:

在 Django 中,模板是可以根据字典数据动态变化的,并且能够根据视图中传递的字典数据动态生成相应的 HTML 网页。Django 中使用 Template 来表示模板,Template 对象定义在 django/template/base.py 文件中,它的构造函数源码如下:

  def __init__(self, template_string, origin=None, name=None, engine=None):
        # If Template is instantiated directly rather than from an Engine and
        # exactly one Django template engine is configured, use that engine.
        # This is required to preserve backwards-compatibility for direct use
        # e.g. Template('...').render(Context({...}))
        if engine is None:
            from .engine import Engine
            engine = Engine.get_default()
        if origin is None:
            origin = Origin(UNKNOWN_SOURCE)
        self.name = name
        self.origin = origin
        self.engine = engine
        self.source = str(template_string)  # May be lazy.
        self.nodelist = self.compile_nodelist()

这个源码看不懂没关系, 按照步骤来, 都是这么来的。

  • 首先 新建 templates 于 nowapp 下一级的目录下,如下:
├─nowapp
│  ├─migrations
│  │  └─__pycache__
│  ├─templates
│  └─__pycache__
└─nowproject
    └─__pycache__

  • 然后在setting.py 文件中,找到TEMPLATES, 按照如下设置
  • 主要是增加 DIRS 里面的模板位置
# setting.py

import  os
TEMPLATES = [
    { 
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'nowapp\\templates\\')],
        'APP_DIRS': True,
        'OPTIONS': { 
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

其中关于TEMPPLAETS的字段解释:

  • BACKEND : Django默认设置,指定了要是用的模板引擎的 Python 路径;
  • DIRS : 一个目录列表,指定模板文件的存放路径,可以是一个或者多个。模板引擎将按照列表中定义的顺序查找模板文件;
  • APP_DIRS : 一个布尔值,默认为 Ture。表示会在安装应用中的 templates 目录中搜索所有模板文件;
  • OPTIONS : 指定额外的选项,不同的模板引擎有着不同的可选参数,例如 context_processors 用于配置模板上下文处理器,在使 RequestContext 时将看到它们的作用。

模板的加载和响应方式:

关于模板的加载和响应方式,django提供了2中方式,

  • 使用 loader 获取模板, 然后使用 HttpResponse 进行响应
  • 直接使用 render 方法加载响应模板 (主要使用这个方法 )

方法介绍如下:

from django.template import loader # 导入loader方法
from django.shortcuts import render #导入render 方法
#方式一

def test_html(request): 
    t=loader.get_template('test.html') 
    html=t.render({ 'name':'第一种'} #以字典形式传递数据并生成html
    return HttpResponse(html) #以 HttpResponse方式响应html

#方式二
from django.shortcuts import render #导入reder方法 
def test_html(request): 
    return render(request,'test.html',{ 'name':'第二种'})#根据字典数据生成动态模板
                  
# 方式二的其他方式(推荐)
def test_html(request):
   name = "第二种"
   return render(request, 'test.html', locals())

render() 方式解释:

renbder 方法的作用是结合一个给定的模板和一个给定的字典,并返回一个渲染后的 HttpResponse 对象。通俗的讲就是把字典格式的内容, 加载进 templates 目录中定义的 HTML 文件, 最终通过浏览器渲染呈现. 关于render 我们查看他的源码,发现他的构造方式如下:

render(request,   template_name,
             context=None, 
       			content_type=None,
       			status=None,
              using=None)

关于参数的含义如下:

  • request: 是一个固定参数,用于生成响应的请求对象, 这个一定要填入 ;

  • template_name: templates 中定义的文件, 要注意路径名, 一般使用 nowapp/test.html ;

  • context: 要传入文件中用于渲染呈现的数据, 默认是字典格式, 或者直接使用 locals() 直接把所有参数构造成字典返回;

  • content_type: 生成的文档要使用的媒体格式类型。默认为 DEFAULT_CONTENT_TYPE 设置的值;

  • status: http 的响应代码,默认是 200;

  • using: 用于加载模板使用的模板引擎的名称。

其中关于 content_type 这个参数其实有很多字段描述的, 找到了一个资料,如下:

  • 1. text/html : HTML 格式
    1. text/csv: csv格式
    2. text/plain :纯文本格式
    3. text/xml : XML 格式
    4. image/gif :gif 图片格式
    5. image/jpeg :jpg 图片格式
    6. image/png:png 图片格式
    7. application/xhtml+xml :XHTML 格式
    8. application/xml: XML 数据格式
    9. application/atom+xml :Atom XML 聚合格式
    10. application/json: JSON 数据格式
    11. application/pdf:pdf 格式
    12. application/msword :Word 文档格式
    13. application/octet-stream : 二进制流数据(如常见的文件下载)
    14. application/x-www-form-urlencoded :form 表单数据被编码为
    15. key/value 格式发送到服务器(表单默认的提交数据的格式)。
    16. multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

下一篇博客我们介绍一下关于Django 模板的四大组成部分, 变量, 标签, 过滤器,以及注释, 翻译至官网文档,不足之处请指教。

ps: 文章主要是用来记录自己的学习情况, 很多我也不会,也就是个菜鸡了。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服