Django笔记&教程 3-1 模板(Template)基础
Django 自学笔记兼学习教程第3章第1节——模板(Template)基础
点击查看教程总目录
1 介绍
模板文件:让Django能够自动生成html代码
作为一个web框架,Django需要需要在html页面里展示python变量值或使用python代码
直接在html里面写入python代码是不行的,所以需要一种方便的方式(根据python变量或python代码)来动态生成HTML。
最常见的方法是使用模板。
注:想要弄懂模板,必须先懂点HTML,不用精通,认识和了解html基础语法、代码结构、相关概念就可以了,
2 代码示例
background.html:
<!DOCTYPE html>
<html lang="en">
<head>
<title>
学生选课管理系统
</title>
</head>
<body>
<div class="main-container">
<div class="main-header">
<div class="main-title">学生选课管理系统</div>
<div class="sub-title">Student Course Management System</div>
{% block welcome_message %}
{% endblock %}
</div>
<div class="login-container">
{% block login_container %}
{% endblock %}
</div>
</div>
</body>
</html>
login_home.html
{% extends "user/background.html" %}
{% block login_container %}
<div class="login-kind student-login-button">
<a href="">学生登录</a>
</div>
<div class="login-kind teacher-login-button">
<a href="">教师登录</a>
</div>
{% endblock %}
这里我们先不急着弄懂里面每行的意思,先观察一下模板(Template)html和普通的html有什么区别。
懂一点html的话,我们就会发现,模板(Template)里面多了一些这样的语句,这在html中是没有的
{% block welcome_message %}
{% endblock %}
{% block login_container %}
{% endblock %}
{% extends "user/background.html" %}
{% block login_container %}
{% endblock %}
这样的语句有什么特点呢。其写法是{%
符号开头,以%}
符号结尾,这两个符号和内部的文本用空格相隔。
这是Django模板语言的一种Tags(标签)语法,
Django模板语言的几种语法我们将在本章第二节做大类介绍,第三节做具体的介绍。
3 视图调用与传参
本文第二部分展示了一个模板的示例。
但是该模板要在前端展示出来,绝不是通过直接请求html对应的文件路径url来获得的。
而是要通过视图函数渲出来。
这里举个实例,本文第二部分的login_home.html
在项目中的相对路径为
templates/user/login_home.html
,用视图函数渲染这个模板,一个简单的写法如下
# views.py
from django.shortcuts import render
def home(request):
return render(request, "user/login_home.html")
访问一个会调用该视图函数的url,即可得到渲染后的login_home.html
如下图。
渲染模板的语法十分简单:
先从django.shortcuts
中导入render
方法
调用render
方法,
第一个参数为视图函数接受的请求对象request
,
第二个参数为模板文件的在模板文件夹下的相对路径,在上面的例子中是"user/login_home.html"
。
这里我们举得例子是一个不用往模板中传入变量的例子。
但实际上,模板的设计就是让我们能够在里面展示python变量值或使用python代码。
所以往模板里面传入变量是一个基础操作,这个时候需要设置render
里面的context
变量,这是一个字典变量。
context
变量的键是模板中能够直接使用的变量名,对应的值即是变量的值。
举个例子,需要往里面传入变量name
,
# views.py
from django.shortcuts import render
def home(request):
my_name = "Big Shuang"
context = {
"name": my_name
}
return render(request, "user/login_home.html", context)
在模板中要是用"Big Shuang"这个值,可以直接调用name
这个变量。
只不过语法上还有点要求,一般在模板中会写成{{ name }}
这样来调用视图中传入的变量。
具体模板的语法会在后面几个小节展开去说。
4 模板设置
参考目录:https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-TEMPLATES
模板的设置在setting.py
变量TEMPLATES
里,默认值如下:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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',
],
},
},
]
变量TEMPLATES
为所有模板引擎的设置的列表。列表中的每一项都是一个字典,其中包含单个引擎的选项。
其中:
DIRS
:模板文件目录(引擎将按顺序搜索查找)。
如项目文件夹下新建模板文件夹templates,则必须在设置里面的DIRS
里添加项目文件夹"templates/"
APP_DIRS
:默认为True
,代表能够在已安装的应用程序(setting.py
里的变量INSTALLED_APPS
里的app)中查找模板源文件。
所以在已安装的应用程序里,新建模板文件夹templates,在里面写模板文件,视图函数能够自动去找到对应的模板文件,是不用修改设置的。
Django笔记&教程 3-1 模板(Template)基础的更多相关文章
- Django笔记&教程 6-2 表单(Form)基础操作
Django 自学笔记兼学习教程第6章第2节--表单(Form)基础操作 点击查看教程总目录 1 - 编写表单类 创建新的表单类的代码,一般写到一个专门的forms.py文件中(一般放在对应的app文 ...
- Django笔记&教程 3-2 模板语法介绍
Django 自学笔记兼学习教程第3章第2节--模板语法介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/templates/# ...
- Django笔记&教程 3-3 模板常用语法
Django 自学笔记兼学习教程第3章第3节--模板常用语法 点击查看教程总目录 本文主要参考:https://docs.djangoproject.com/en/2.2/ref/templates/ ...
- Django笔记&教程 3-4 模板继承
Django 自学笔记兼学习教程第3章第4节--模板继承 点击查看教程总目录 在介绍具体的技术之前,先介绍在什么样的场景中,需要使用这样的技术,我觉得这对于新手理解起来很重要. 一般来说,要渲染一个页 ...
- Django笔记&教程 5-1 基础增删查改
Django 自学笔记兼学习教程第5章第1节--基础增删查改 点击查看教程总目录 第四章介绍了模型类models.Model和创建模型,相当于介绍了数据库表和如何创建数据库表. 这一章将介绍如何使用模 ...
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
- Django笔记&教程 1-2 二 常用配置
Django 自学笔记兼学习教程第1章第2节--二 常用配置 点击查看教程总目录 新手建议简单浏览本文,不理解的建议跳过,不要强行理解. Django的设置涉及多个模块,需要了解Django的一些相关 ...
- Django笔记&教程 2-3 视图(view)函数介绍
Django 自学笔记兼学习教程第2章第3节--视图(view)函数介绍 点击查看教程总目录 参考文献:https://docs.djangoproject.com/en/2.2/topics/htt ...
- Django笔记&教程 2-2 URL详细匹配规则
Django 自学笔记兼学习教程第2章第2节--URL详细匹配规则 点击查看教程总目录 本章第一节中我们简单介绍了URL与View关系 简单概括来说,网页请求的url会通过urls.py里面的urlp ...
随机推荐
- 如何一次性add library to classpath
前言:导入项目时,时常需要手动导包,提示"add library to classpath",需要一个个找报红的类 点击添加本地项目包
- kubelet源码分析——监控Pod变更
前言 前文介绍Pod无论是启动时还是关闭时,处理是由kubelet的主循环syncLoop开始执行逻辑,而syncLoop的入参是一条传递变更Pod的通道,显然syncLoop往后的逻辑属于消费者一方 ...
- 10.1 HTTP
1.跨网络的主机间通讯 套接字Socket是进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上不同进程之间通信和数据交换 在建立通信连接的每一端,进程间的传输要有两个标志:IP地址和端口号, ...
- break和continue关键字
什么是break break 跳出最里层的循环,并且继续执行该循环下面的语句 就是强制退出循环 示例 package struct; public class ForDemo05 { public s ...
- Scala trait特质 深入理解
Scala trait特质 深入理解 初探Scala 特质trait 在Scala中,trait(特质)关键字有着举足轻重的作用.就像在Java中一样,我们只能在Scala中通过extends进行单一 ...
- 洛谷4475 巧克力王国(KD-Tree + 维护子树和)
(嘤嘤嘤 又是一个自闭了一晚上的题) qwq果然不是平面上的点的问题,也可以直接用KDTree打暴力 我们对于巧克力直接建kdtree 维护一个\(mx[i],mn[i]\) 但是有一个非常不友好的事 ...
- Johnson 全源最短路径算法学习笔记
Johnson 全源最短路径算法学习笔记 如果你希望得到带互动的极简文字体验,请点这里 我们来学习johnson Johnson 算法是一种在边加权有向图中找到所有顶点对之间最短路径的方法.它允许一些 ...
- ToString()字符串转换你用正确了吗?
前言 在开发中,ToString()这个方法太方便了,以致于误解大家转换时都是直接Object.ToString()直接转换, 其实不然, 一般都是转之前先判断是否为null后再进行转换,否则会直接报 ...
- 3.3 Execution Flow of a DDD Based Application 基于DDD的应用程序执行流程
3.3 Execution Flow of a DDD Based Application 基于DDD的应用程序执行流程 The figure below shows a typical reques ...
- kivy Label触发事件
kivy label也可以触发事件,为什么只有我这么无聊学垃圾kivy """ 在通过ref标记一段文本后点击这段文本就可以触发'on_ref_press'事件,在该事 ...