引言

如何向请求者返回一个漂亮的页面呢?

肯定需要用到 html、css ,如果想要更炫的效果还要加入 js,问题来了,这么一堆字符串全都写到视图中,作为 HttpResponse() 的参数吗?

先看看如何拼接 html

# -*- coding:utf-8 -*-
"""
@Author   :Hui
@Desc     :{book应用视图模块}
"""
from django.views import View
from django.http import HttpResponse# /book/index
def index(request):"""图书首页"""if request.method == "GET":res_html = "<h1>GET请求 - 图书信息页</h1><br/>"books = ["射雕英雄传", "神雕侠侣", "倚天屠龙记"]res_html += "<ul>"for book in books:res_html += "<li>"res_html += bookres_html += "</li>"res_html += "</ul>"return HttpResponse(res_html)

这样定义就太麻烦了吧,并且定义字符串是不会出任何效果和错误,如果有一个专门定义前端页面的地方就好了。

Django 中,将前端的内容定义在 模板 中,然后再把模板交给视图调用,各种漂亮、炫酷的效果就出现了。

运行环境

  • Python 3.9
  • Django 3.1.2

Django模板

创建模板

Django项目下创建 templates 目录然后在创建 book 目录,代表这存放着 book 应用的模板文件。

目录结构如下图:

配置模板

Django 项目下的 setting.py 文件中找到 TEMPLATES 配置选项,配置如下目录路径

'DIRS': [BASE_DIR / 'templates']
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [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',],},},
]
BASE_DIR = Path(__file__).resolve().parent.parent

BASE_DIR 是你 Django 项目的绝对路径

可以在终端控制台输入如下命令

python manage.py shell

打开项目的 shell 终端进行调试。

定义模板

打开 templtes/book/index.html 文件,定义代码如下:

<!DOCTYPE html>
<html lang="zh-hans">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>图书信息</title>
</head>
<body><h2>{{ title }}</h2><ul>{% for book in books %}<li>{{ book.title }} --- {{ book.author }}</li>{% endfor %}</ul>
</body>
</html>

在模板中输出变量语法如下,变量可能是从视图中传递过来的,也可能是在模板中定义的。

{{ 变量名 }}

在模板中编写代码段语法如下:

{% 代码段 %}

更多模板语法这里就不一一叙述了。

视图调用模板

调用模板分为三步骤:

  • 找到模板
  • 定义上下文
  • 渲染模板
from django.views import View
from book.models import BookInfo
from django.template import loader
from django.http import HttpResponse# /book/info
class InfoView(View):"""图书信息视图类"""def get(self, request):# 从数据库中获取图书信息books = BookInfo.objects.all()# 获取模板tmp = loader.get_template('book/index.html')# 定义上下文context = {"title": "图书信息","books": books,}# 渲染模板content = tmp.render(context)return HttpResponse(content)

在浏览器上访问 http://127.0.0.1:8000/book/info 效果如下图

视图调用模板简写

视图调用模板都要执行以上三部分,于是 Django 提供了一个函数 render 封装了以上代码。

函数 render 包含3个参数:

  • 第一个参数为 request 对象
  • 第二个参数为 模板文件路径
  • 第三个参数为 字典,表示向模板中传递的 上下文数据

调用 render 的代码如下:

from django.views import View
from book.models import BookInfo
from django.shortcuts import render# /book/info
class InfoView(View):"""图书信息视图类"""def get(self, request):# 从数据库中获取图书信息books = BookInfo.objects.all()# 定义上下文context = {"title": "图书信息","books": books,}return render(request, "book/index.html", context)

公众号

新建文件夹X

大自然用数百亿年创造出我们现实世界,而程序员用几百年创造出一个完全不同的虚拟世界。我们用键盘敲出一砖一瓦,用大脑构建一切。人们把1000视为权威,我们反其道行之,捍卫1024的地位。我们不是键盘侠,我们只是平凡世界中不凡的缔造者 。

Django教程 —— Django模板相关推荐

  1. python后台架构Django教程——templates模板

    全栈工程师开发手册 (作者:栾鹏) 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng825485697/articl ...

  2. Django教程 —— Django入门

    目标 了解虚拟环境,熟悉Django项目.manage.py的指令.配置文件. 使用Django框架有一个全面的认识,包括开发流程.基本概念要素. 创建自己的第一个Django项目--图书管理系统(B ...

  3. Django教程:Django常用命令

    Django常用的命令. 安装Django: pip install django  指定版本 pip3 install django==2.0 新建项目: django-admin.py start ...

  4. Django 3.2.5博客开发教程:实现模板之前的分析与准备

    在之前的体验django模板.体验数据查询以及一些常用的模板使用方法文章里,向大家介绍了如何将数据库的数据展现到网页上,和一些简单的模板使用方法.之后我们就开始实现各种页面的展现. 在此之前,我们先从 ...

  5. 如何自学python到做项目-django教程如何自学

    Django教程是讲解Django框架学习方法和步骤的,可以理解为教材,是供初学者或者程序员学习和提升技术的. 下面介绍下Django教程所包含的内容以及学Django所需要的必备技能. 学Djang ...

  6. Django 笔记4 -- 模板

    Django 笔记4 – 模板 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django官 ...

  7. django教程day06

    <Django 教程> 讲师: 魏明择 时间: 2019 目录 数据表关联关系映射 Relationship Map 一对一映射 一对多映射 多对多映射 cookies 和 session ...

  8. python django教程_Django快速入门

    >>> import django >>> print(django.get_version()) 1.9.1 这就算安装完成了.接下来我们要进入开发的第一步. 开 ...

  9. 第三百一十节,Django框架,模板语言

    第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...

最新文章

  1. 香港中文大学(深圳)招收博士生硕士生(计算机视觉方向)
  2. Java 进行 RSA 加解密时不得不考虑到的那些事儿
  3. android培训内容明细,记录Android开发学习
  4. Ansible学习实战手记-你想要知道的可能都在这里了
  5. 谈论Java原子变量和同步的效率 -- 颠覆你的生活
  6. 删除linux 软raid0,配置Linux软RAID0
  7. 【转】测试过程管理案例6---如何做项目的测试经理?
  8. 函数 单片机glint_PIC单片机CCS之C语言(#BIT的用法)
  9. 挑战面试编程:大整数的加、减、乘、除
  10. 汉诺塔问题(三柱及四柱)详解
  11. 用vue实时监听多个用户扫描二维码
  12. 小米手机怎么复制加密门禁卡_使用小米手机复制加密门禁卡的方法
  13. 计算机常用压缩软件有哪些,电脑压缩软件哪个好推荐
  14. 线程局部存储-pthread_getspecific和pthread_setspecific使用
  15. 什么软件能测试显卡功耗,测试方案及测试平台
  16. windows系统镜像修复计算机,为你详解win7系统还原及映像修复功能
  17. AM335x片上ecap驱动移植
  18. 汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp 寄存器 含义
  19. Android 应用进程保活APP常驻内存研究方案
  20. 关于员工激励的思考-期望理论

热门文章

  1. 游戏关键字070805
  2. DevOps背景下的分合之事
  3. 【论文翻译】ORB-SLAM: A Versatile and Accurate Monocular SLAM System
  4. 如何利用虚拟光驱安装windows 7?
  5. 论文阅读:Task Discrepancy Maximization for Fine-grained Few-Shot Classification
  6. ios动画原理 modelLayer和presentationLayer以及点击交互
  7. DAYU200 2048 小游戏- OpenHarmony版
  8. 天马8.4寸军工屏P0840XGF1MA00-8.4寸军工屏
  9. PS 蒙板工具使用
  10. 深度 | 腾讯 AI Lab副主任俞栋:过去两年基于深度学习的声学模型进展