【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的文件夹

    在这里插入图片描述

  2. 设置模板语言为Django语言

    在这里插入图片描述

  3. 使用多模板的情况

    在这里插入图片描述

二、模板的加载与渲染

模板的加载

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文件

    在这里插入图片描述

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

    在这里插入图片描述


    在这里插入图片描述

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

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

    在这里插入图片描述

  2. 运行过程

    在这里插入图片描述


    在这里插入图片描述

三、模板语言

主要分为四大模块
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)    # 返回响应到浏览器
  1. 模板(HTML文件)中使用变量

    在这里插入图片描述

  2. 运行过程

    在这里插入图片描述

注释

1 . htm1的注释语法,这个注释会在前端源代码中呈现出来
2. {#注释2#}DTL的注释语法
3. {% comment %}内容{% endcomment %]}
comment标签之间的内容全部都会注释掉不管是{##}还是使用comment标签进行注释的时候,都不会在前端的源代码中呈现

在这里插入图片描述


在这里插入图片描述

标签

用法:
类似于{% tag %}。相对于变量来说标签更加复杂,标签可以用于输出文本、控制代码逻辑等。
有的标签还需要有开始标记和结束标记,这类标签的格式类似于
{% tag %}…{% endtag %}。

常用标签:
1.blobk:用于定义一个模板块,这个模板块能够被子模板重写
2.extends:用于标记当前模板继承自哪个父模板
3.comment:模板中的注释
4. for:循环遍历一个可迭代对象5. if:条件判断
6. with:为变量创建别名

案例一:常用标签的使用

在这里插入图片描述


在这里插入图片描述

案例二:自定义标签

1.在子应用中创建一个名为templatetags(必须为这个名字)的文件夹用于存放自定义标签的文件夹
2.创建用于定义自定义标签的py文件,以及一个__init__.py文件,该文件表示将所在目录视作一个可被导入的模块
4.实例化一个Library对象
注意,register变量名千万不要变,不要用其他的名字,就用register
5.定义实现自定义标签,以函数的形式
6.将设计好的自定义标签进行注册
7.在模板文件的开头写上{% load tags %},tags为自定义标签名,将自定义标签加载到模板文件中

具体实现步骤

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

    在这里插入图片描述

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

    在这里插入图片描述

  • mytag文件中写上函数

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

from django.template import Library

register = Library() # register变量名不能变

@register.simple_tag()  # 将自定义标签进行注册
def change_1(value):
    return 'haha' + value
  • 在模板文件的开头位置加载自定义标签并使用

    在这里插入图片描述


    在这里插入图片描述

  • 运行结果

    在这里插入图片描述

过滤器

作用:过滤器可以用来修改变量的显示样式。
使用方式:
{{变量|过滤器方法}}。过滤器可以连续使用,形式如:f变量|过滤器方法1过滤器方法2}}。
如果过滤器需要参数,则使用冒号∵’传递参数。形式如:ff变量|过滤器:‘参数’}
注意:变量、管道符("I’)和过滤器方法之间不能有空格

常用过滤器:
safe,禁用转义,告诉模板这个变量是安全的,可以解释执行
length,长度,返回字符串包含字符的个数,或列表、元祖、字典的元素个数。
default,默认值,如果变量不存在时则返回默认值。 data ldefault:"默认值’
date,日期,用关于对日期类型的值进行字符串格式化- add,将参数添加到值中。

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

  • 视图函数

    在这里插入图片描述

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

    在这里插入图片描述

  • 结果显示

    在这里插入图片描述

案例二:自定义过滤器

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

    在这里插入图片描述

  • 在此文件中写上自定义的过滤器
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
  • 将自定义的过滤器加载到模板文件中并使用

    在这里插入图片描述

  • 结果显示

    在这里插入图片描述


    在这里插入图片描述

原文地址:https://blog.csdn.net/Oh_Python

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


注:所有源代码均实测运行过。所有源代码均已上传CSDN,请有需要的朋友自行下载。
继承APIView和ViewSetMixin;作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。ViewSet在开发接口中不经常用。
一、Django介绍Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。Django学习线路Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。这个MVT模式并
本文从nginx快速掌握到使用,gunicorn快速掌握到使用,实现小白快速搭建django项目,并对可能出现的报错进行了分析
uniapp微信小程序订阅消息发送服务通知
Django终端打印SQL语句 1 Setting配置: 2 默认python 使用的MysqlDB连接,Python3 支持支持pymysql 所有需要在app里面的__init__加上下面配置:
url: re_path('authors/$', views.AuthorView.as_view()), re_path('book/(?P\d+)/$', vie
前提 关于html寻找路线: template 如果在各个APP中存在, Django 会优先找全局template 文件下的html文件,如果全局下的template文件没有相关的html Djan
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
from bs4 import BeautifulSoup#kindeditordef kindeditor(request): s = ''' <li><s
view.py 配置 html 配置
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type&#
浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本(javascript、ActionScript)在没明确授权的情况
自动发送 > 依赖jQuery文件 实例-->GET请求: 手动发送 > 依赖浏览器XML对象(也叫原生ajax) Ajax主要就是使用 【XmlHttpRequest】对象来完成请
#下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) &gt
// GET请求request.GET // POST请求request.POST // 处理文件上传请求request.FILES // 处理如checkbox等多选 接受列表request.get
return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render