【Django学习笔记 - 10】:模板与模板语法

简介: 【Django学习笔记 - 10】:模板与模板语法

一、模板介绍与配置


模板的介绍


Django的模板是一个简单的文本文件,可以是任何文本格式,如HTML、XML、TXT等,推荐使用HTML格式。在Django中可以看做创建HTML页面的样本。包含静态的HTML和用于描述如何动态生成HTML的特殊语法两个部分。


模板的结构:


Django模板的结构与Html文件相似,甚至完全可以使用一个HTML文件作为模板。

Django使用模板引擎Django Template Language(往后统称DTL)与Jinja2对模板文件进行解释,一个Django工程可以配置一个或者多个模板引擎。如果项目中没有使用模板,那么也可以不配置模板引擎。



DTL


Django自带的模板系统叫做DTL,通过该引擎可以方便地加载模板文件并在内存中进行编译,然后插入动态数据,最后返回一个字符串。Django中很多内部组件都使用了DTL,例如admin,因此不建议放弃DTL


模板的配置


  1. 创建模板文件
    在项目根目录下创建一个Templates的文件夹



47a6c26d8c0347808dfc2319aa208d7c.png



设置模板语言为Django语言

133271c53bd441c081306fad923f281b.png


使用多模板的情况

dfec8eace7db4b55ae0ba39b3ee13a5e.png




二、模板的加载与渲染


模板的加载


1.导入diango.template.loader.get_template


2.将模板文件夹之中的模板文件加载到视图之中


3.将加载后的模板进行传参后渲染到浏览器之中




加载模板


   django.template.loader模块中提供了两个用于加载模板的方法:

   -get_template ( template_name,using = None)


   该方法使用给定的名称查找和加载模板,并返回一个Template对象。如果想使用指定的模板引擎进行查找,请将模板引擎的NAME赋给get_template的using参数。



select_template (template_name_list, using = None)

该方法接收一个模板名称的列表,返回第一个存在的Template对象。同样using参数用于改变模板引擎。


当找不到对应的模板时,这两个方法都会返回TemplateDoesNotExist异常。如果模板找到了,但是模板中存在语法错误,返回TemplateSyntaxError异常。




模板的渲染

   Template.render(request=None, context=None)


   参数说明:

   context:需要展示到HTML文件上的数据集合,它是一个字典对象。如果render没有接受任何context,模板引擎就会直接渲染模板而不插入任何数据。


   request:一个HttpRequest对象。不同的模板引擎对request对象的处理方式不同

   注:模板的加载与渲染都是在视图 (view.py)中进行



具体操作


案例一:指定渲染模板


  1. 模板文件中创建几个HTMl文件


c3bd2475c32a42579ca06cc02bd1dac8.png


在视图函数中写上加载模板和渲染模板的视图函数


def template_view1(request):
    temp = get_template('One.html') # 将模板加载到视图中,直接将模板文件的文件名写入即可,不用添加路径,前提是模板文件夹在根目录中,模板文件在根目录中
    res = temp.render(request=request, context=None)    # 模板的渲染
    return HttpResponse(res)    # 返回响应到浏览器


运行过程

0d75d7cab5234e028ffd1298a5a19efd.png

113e6236e1b84e6f9e8edb37bbb1dd6f.png




案例二:使用render方法将模板直接渲染并返回给浏览器


  1. 代码如下
def template_view2(request, path):
    return render(request=request, template_name=path)  # 第一个参数仍然是传入模板文件的文件名


子应用中路由的配置

ba60ce41f3124c6da99390989533adaa.png


运行过程

63de92fb2dda4ae09e26348fd2425fab.png





三、模板语言


主要分为四大模块


1.变量


2.注释


3.标签


4.过滤器


变量

   {{ 变量名 }} --> 模板语言中变量的表现形式,变量名就是context中的键名

   模板语言,只能用于有DTL模板引擎渲染的项目之中,即只能由django进行渲染了之后,才来。


   注意:当值为列表时,取值方法:{f变量名.下标}}

   当值为字典时,取值方法:{{键名.键名}}



具体案例


  1. 视图的代码如下


def template_view1(request):
    temp = get_template('One.html') # 将模板加载到视图中,直接将模板文件的文件名写入即可,不用添加路径,前提是模板文件夹在根目录中,模板文件在根目录中
    context = {
        'name': '阿峰',
        'age' : 20,
        'like': ['read', 'listen', 'music', 'sport'],
        'other': {
            'game': 'LoL',
            'watch': 'film'
        }
    }
    res = temp.render(request=request, context=context)    # 模板的渲染
    return HttpResponse(res)    # 返回响应到浏览器



模板(HTML文件)中使用变量

1c882a0993ed4b6b9dfe42af86150d61.png

运行过程

fafcfa9c5537414db04703f4d19db0b5.png




注释


   1 . htm1的注释语法,这个注释会在前端源代码中呈现出来


   2. {#注释2#}DTL的注释语法


   3. {% comment %}内容{% endcomment %]}


   comment标签之间的内容全部都会注释掉不管是{##}还是使用comment标签进行注释的时候,都不会在前端的源代码中呈现



b5f9a720b363437c92c84c1a7866ce68.png

2b396c15186d422cae2d5aa4fafeebce.png



标签


用法:

类似于{% tag %}。相对于变量来说标签更加复杂,标签可以用于输出文本、控制代码逻辑等。


有的标签还需要有开始标记和结束标记,这类标签的格式类似于

{% tag %}…{% endtag %}。


常用标签:


1.blobk:用于定义一个模板块,这个模板块能够被子模板重写


2.extends:用于标记当前模板继承自哪个父模板


3.comment:模板中的注释


4. for:循环遍历一个可迭代对象5. if:条件判断


6. with:为变量创建别名




案例一:常用标签的使用

e1543bd702264af5b8270a8334f41979.png

8579cda5e5e1447195e4338f0f6d7777.png



案例二:自定义标签


   1.在子应用中创建一个名为templatetags(必须为这个名字)的文件夹用于存放自定义标签的文件夹


   2.创建用于定义自定义标签的py文件,以及一个__init__.py文件,该文件表示将所在目录视作一个可被导入的模块


   4.实例化一个Library对象


   注意,register变量名千万不要变,不要用其他的名字,就用register


   5.定义实现自定义标签,以函数的形式


   6.将设计好的自定义标签进行注册


   7.在模板文件的开头写上{% load tags %},tags为自定义标签名,将自定义标签加载到模板文件中



具体实现步骤

  • 在子应用中创建一个名为templatetags的文件夹

4d4b3f7ccffe4ef390551fc96d3e9746.png


创建一个自定义标签文件和__init__文件

925082ea13c6458ca0d1eab341c8d868.png


  • mytag文件中写上函数

需要导入的模块:from django.template import Library


from django.template import Library
register = Library() # register变量名不能变
@register.simple_tag()  # 将自定义标签进行注册
def change_1(value):
    return 'haha' + value


在模板文件的开头位置加载自定义标签并使用


58d32134decb41dca41760d7e33f5f25.pngdde06eaa7d634b078b2bc4ac41234f9a.png

运行结果

b81c8805fe5d45a9bff6cd3f12807d03.png


过滤器

   作用:过滤器可以用来修改变量的显示样式。


   使用方式:

   {{变量|过滤器方法}}。过滤器可以连续使用,形式如:f变量|过滤器方法1过滤器方法2}}。


   如果过滤器需要参数,则使用冒号∵’传递参数。形式如:ff变量|过滤器:‘参数’}

   注意:变量、管道符("I’)和过滤器方法之间不能有空格



   常用过滤器:

   safe,禁用转义,告诉模板这个变量是安全的,可以解释执行

   length,长度,返回字符串包含字符的个数,或列表、元祖、字典的元素个数。


   default,默认值,如果变量不存在时则返回默认值。 data ldefault:"默认值’

   date,日期,用关于对日期类型的值进行字符串格式化- add,将参数添加到值中。




案例一:常用过滤器的使用

   视图函数



65ead6b1b4b74f5f8450fbb495ffc2fc.png

在模板文件中使用常用过滤器

c847a5f7347745bfbaab0cf3f2e91e37.png


结果显示

c64b5070d7714ea59433c874987e2a82.png


案例二:自定义过滤器

  • templatetags文件夹中创建一个自定义的过滤器py文件


e8ec6ac7bcbb416ca9065f04ad8e6e59.png


在此文件中写上自定义的过滤器

from django.template import Library
register = Library()
@register.filter(name='str_add')
def str_add(value):
    return value + ' very handsome'
@register.filter(name='int_add')
def int_add(value1, value2):
    print(value1)
    print(value2)
    return value1 + value2


将自定义的过滤器加载到模板文件中并使用

da3bf3b749ea4ad4a2d381a9719e06fc.png

结果显示

1eee3bc0689f4d2894f1628b76234d45.png


d1e7009a7509416bad9b291bf9d89665.png



相关文章
|
4月前
|
SQL 前端开发 JavaScript
Python 教程之 Django(10)模板
Python 教程之 Django(10)模板
54 0
|
10天前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
13天前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
9 1
|
20天前
|
前端开发 Python
Django模板
【8月更文挑战第19天】
25 3
|
26天前
|
自然语言处理 前端开发 数据处理
Django的模板系统
【8月更文挑战第13天】
22 2
|
10天前
|
安全 JavaScript 前端开发
Django入门到放弃之模板及标签
Django入门到放弃之模板及标签
|
3月前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用合集之基于django应用模板创建的FC,如何配置数据库
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
Python
Django——模板
Django——模板
|
4月前
|
缓存 JavaScript 安全
Django的模板渲染(二)
Django的模板渲染(二)
|
4月前
|
前端开发 JavaScript 开发者
Django的模板渲染(一)
Django的模板渲染(一)