美文网首页Python
【Django】模板Templates

【Django】模板Templates

作者: 小蜗牛的成长 | 来源:发表于2019-04-23 09:53 被阅读8次

    使用Django 的Templates系统,不仅实现了前后端分离、动态生成html;而且可以实现模板继承,减少重复代码等

    前言

       Django 项目可以配置0个、一个或者多个模板引擎,当执行startproject命令创建项目时,会在settings.py文件中自动配置默认使用一个模板引擎,如下

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': (os.path.join(BASE_DIR, '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',
                ],
            },
        },
    ]
    

       BACKEND字段:实现Django后端API的模板引擎类,内置有:django.template.backends.django.DjangoTemplatesdjango.template.backends.jinja2.Jinja2

       DIRS字段:定义引擎应按搜索顺序查找模板源文件的目录列表,如上:搜索项目下的templates目录

       APP_DIRS字段:告诉引擎是否应该在已安装的应用程序中查找模板,如上,设置为True,搜索各应用(app)下的templates目录。通常情况下,一个项目有多个app应用,为了分类管理及避免同文件使用错误,在app下创建templates目录结构为:app/templates/app/**.htmlapp这里的需要替换成具体的名称,视图中引用模板,使用相对templates目录的路径,即app/**.html

       OPTIONS字段:特定后端的配置

    根据上述配置,设置了APP_DIRS=True,模板引擎搜索templates顺序为:DIRS > 当前项目安装app的templates目录 > 其他已安装app的templates目录,找到就停止搜索,找不到就抛出异常

    由于历史原因,模板引擎的通用支持和Django模板语言的实现都存在于django.template 命名空间中
    django.template.loader模块定义了两个用于加载模板的函数
       get_template(template_name,using = None)返回一个 Template对象,找不到模板时会抛出django.template.TemplateDoesNotExist异常
       select_template(template_name_list,using = None) 根据模板名称列表。按顺序查找每个名称并返回存在的第一个Template对象
    通过get_template()或select_template()返回Template对象,为对象提供了一个render()方法
       Template.render(context=None, request=None)
          context 模板上下文,为模板传递参数,字典类型
          request,HttpRequest类型,与引擎后端有关
    render_to_string(template_name,context = None,request = None,using = None) 加载模板【get_template()或select_template()】和渲染【Template.render】,这是一个减少加载和渲染模板的重复性,django.template 提供的一个快捷方法

    以上简单说明了模板引擎内部方法,真正使用时,可直接使用Django 提供的快捷方法django.shortcuts.render,无需重复造轮子

    除了使用内置引擎,也可以自定义引擎,这里不做展开

    模板语言DTL(Django Templates Language)

    变量

      使用{{var}},若不存在,插入空字符

    字典

    模板中使用字典,与python语言使用有点区别
      获取键值对{{dicts.items}}
      获取值dicts.key #指定具体key

    对象

      获取对象值obj.attr

    列表

      获取索引值mylist.0

    标签
    标签
    过滤器
    过滤器

    相关文章

      网友评论

        本文标题:【Django】模板Templates

        本文链接:https://www.haomeiwen.com/subject/pjfygqtx.html