python全栈开发基础知识学习——Django框架(三、Template模块)

一、模板(Template)简介

1.简介

作为一个Web框架,Django需要一种动态生成HTML的便捷方式。最常见的方法依赖于模板。模板包含所需HTML输出的静态部分以及描述如何插入动态内容的一些特殊语法。
Django项目可以配置一个或多个模板引擎(如果不使用模板,甚至可以为零)。Django为其自己的模板系统提供内置后端,创造性地称为Django模板语言(DTL),以及流行的替代Jinja2。可以从第三方获得其他模板语言的后端。

Django定义了一个标准API,用于加载和呈现模板,无论后端如何。加载包括查找给定标识符的模板并对其进行预处理,通常将其编译为内存中表示。渲染意味着使用上下文数据插入模板并返回结果字符串。

由于历史原因,模板引擎的通用支持和Django模板语言的实现都存在于django.template 命名空间中。


2.模板系统简介

你可能已经注意到我们在例子视图中返回文本的方式有点特别。 也就是说,HTML被直接硬编码在 Python代码之中。

------------------------------------urls.py-----------------------------------------------
    path('current_datetime', views.current_datetime),
------------------------------------views.py---------------------------------------------
def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到你的视图里却并不是一个好主意。 让我们来看一下为什么:

  • 对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。 站点设计的修改往往比底层 Python 代码的修改要频繁得多,因此如果可以在不进行 Python 代码修改的情况下变更设计,那将会方便得多。

  • Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成。 设计者和HTML/CSS的编码人员不应该被要求去编辑Python的代码来完成他们的工作。

  • 程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python又包含 HTML 的文件的编辑工作。

基于这些原因,将页面的设计和Python的代码分离开会更干净简洁更容易维护。 我们可以使用 Django的 模板系统 (Template System)来实现这种模式,这就是本章要具体讨论的问题。

二、Django模板语言

Django模板只是一个文本文档或使用Django模板语言标记的Python字符串。一些构造由模板引擎识别和解释。主要是变量和标签。

使用上下文呈现模板。渲染将变量替换为其值,这些值在上下文中查找,并执行标记。其他所有内容都按原样输出。

Django模板语言的语法涉及四种结构。


组成:HTML代码+逻辑控制代码


1.模板

模板只是一个文本文件。它可以生成任何基于文本的格式(HTML,XML,CSV等)。

模板包含变量,这些变量在评估模板时将替换为值,而变量则包含控制模板逻辑的标记

为什么使用基于文本的模板而不是基于XML的模板(如Zope的TAL)?我们希望Django的模板语言不仅可用于XML / HTML模板。在World Online,我们将其用于电子邮件,JavaScript和CSV。您可以将模板语言用于任何基于文本的格式。


2.变量

变量从上下文输出一个值,这是一个类似于dict的对象,它将键映射到值。
变量(使用双大括号来引用变量):语法格式: { {var_name}}

当模板引擎遇到变量时,它会计算该变量并将其替换为结果。变量名由字母数字字符和下划线()的任意组合组成,但不能以下划线开头。重要的是,变量名称中不能包含空格或标点符号
在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)
注意点

从技术上讲,当模板系统遇到一个点时,它会按以下顺序尝试以下查找:

		1.字典查找
		2.属性或方法查找
		3.数字索引查找
如果结果值是可调用的,则调用它时不带参数。调用的结果成为模板值。

此查找顺序可能会导致覆盖字典查找的对象出现一些意外行为。

字典查找,属性查找和列表索引查找使用点表示法实现:

{
  { my_dict.key }}
{
  { my_object.attribute }}
{
  { my_list.0 }}
# 首先,句点可用于访问列表索引,例如:
-------------------------------views.py--------------------------------
def test(request):
	 test_list = ["xiaoming","baidu"]
	 return render(request,"test.html",locals())
--------------------------------test.html------------------------------
<body>
<p>hello {
  { test_list }}</p>
<p>hello {
  { test_list.0 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值