Django教程 —— Django模板
引言
如何向请求者返回一个漂亮的页面呢?
肯定需要用到
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模板相关推荐
- python后台架构Django教程——templates模板
全栈工程师开发手册 (作者:栾鹏) 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng825485697/articl ...
- Django教程 —— Django入门
目标 了解虚拟环境,熟悉Django项目.manage.py的指令.配置文件. 使用Django框架有一个全面的认识,包括开发流程.基本概念要素. 创建自己的第一个Django项目--图书管理系统(B ...
- Django教程:Django常用命令
Django常用的命令. 安装Django: pip install django 指定版本 pip3 install django==2.0 新建项目: django-admin.py start ...
- Django 3.2.5博客开发教程:实现模板之前的分析与准备
在之前的体验django模板.体验数据查询以及一些常用的模板使用方法文章里,向大家介绍了如何将数据库的数据展现到网页上,和一些简单的模板使用方法.之后我们就开始实现各种页面的展现. 在此之前,我们先从 ...
- 如何自学python到做项目-django教程如何自学
Django教程是讲解Django框架学习方法和步骤的,可以理解为教材,是供初学者或者程序员学习和提升技术的. 下面介绍下Django教程所包含的内容以及学Django所需要的必备技能. 学Djang ...
- Django 笔记4 -- 模板
Django 笔记4 – 模板 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django官 ...
- django教程day06
<Django 教程> 讲师: 魏明择 时间: 2019 目录 数据表关联关系映射 Relationship Map 一对一映射 一对多映射 多对多映射 cookies 和 session ...
- python django教程_Django快速入门
>>> import django >>> print(django.get_version()) 1.9.1 这就算安装完成了.接下来我们要进入开发的第一步. 开 ...
- 第三百一十节,Django框架,模板语言
第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...
最新文章
- 香港中文大学(深圳)招收博士生硕士生(计算机视觉方向)
- Java 进行 RSA 加解密时不得不考虑到的那些事儿
- android培训内容明细,记录Android开发学习
- Ansible学习实战手记-你想要知道的可能都在这里了
- 谈论Java原子变量和同步的效率 -- 颠覆你的生活
- 删除linux 软raid0,配置Linux软RAID0
- 【转】测试过程管理案例6---如何做项目的测试经理?
- 函数 单片机glint_PIC单片机CCS之C语言(#BIT的用法)
- 挑战面试编程:大整数的加、减、乘、除
- 汉诺塔问题(三柱及四柱)详解
- 用vue实时监听多个用户扫描二维码
- 小米手机怎么复制加密门禁卡_使用小米手机复制加密门禁卡的方法
- 计算机常用压缩软件有哪些,电脑压缩软件哪个好推荐
- 线程局部存储-pthread_getspecific和pthread_setspecific使用
- 什么软件能测试显卡功耗,测试方案及测试平台
- windows系统镜像修复计算机,为你详解win7系统还原及映像修复功能
- AM335x片上ecap驱动移植
- 汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp 寄存器 含义
- Android 应用进程保活APP常驻内存研究方案
- 关于员工激励的思考-期望理论
热门文章
- 游戏关键字070805
- DevOps背景下的分合之事
- 【论文翻译】ORB-SLAM: A Versatile and Accurate Monocular SLAM System
- 如何利用虚拟光驱安装windows 7?
- 论文阅读:Task Discrepancy Maximization for Fine-grained Few-Shot Classification
- ios动画原理 modelLayer和presentationLayer以及点击交互
- DAYU200 2048 小游戏- OpenHarmony版
- 天马8.4寸军工屏P0840XGF1MA00-8.4寸军工屏
- PS 蒙板工具使用
- 深度 | 腾讯 AI Lab副主任俞栋:过去两年基于深度学习的声学模型进展