8-tornado中模板的使用(通过字符串返回、通过模板Template返回、通过模板render返回)、模板案例

1 Template

1.1 通过字符串返回

import tornado
class IndexHandler(web.RequestHandler):def get(self):arg = 'Template'self.finish(f'<h1>Hello {arg}!!</h1>')

1.2 通过模板Template返回

tornado.template

一个简单的模板系统,将模板编译为Python代码。
基本用法如下

class IndexHandler1(web.RequestHandler):def get(self):arg = 'Template1't = template.Template(f'<h1>Hello {arg}!!</h1>')self.finish(t.generate())class IndexHandler2(web.RequestHandler):def get(self):arg1 = 'Template2't = template.Template('<h1>Hello {{arg}}!!</h1>')self.finish(t.generate(arg = arg1))class IndexHandler3(web.RequestHandler):def get(self):arg1 = 'Template3_file'loader = template.Loader('./templates/')self.finish(loader.load('index.html').generate(arg = arg1))
<!-- templates/index.html -->
<h1>Hello {{arg}}!!</h1>

1.3 通过模板render返回

class IndexHandler4(web.RequestHandler):def get(self):arg1 = 'render_Template3_file'self.render('index.html',arg=arg1)     

2 模板案例

*前端

   <!DOCTYPE html><html><head><meta charset="utf-8"/><title>购物车</title><link rel="stylesheet" type="text/css" href="{{ static_url('css/style.css') }}" /><script src="{{ static_url('js/html5.js') }}"></script><script src="{{ static_url('js/jquery.js') }}"></script><script>$(document).ready(function(){$("nav .indexAsideNav").hide();$("nav .category").mouseover(function(){$(".asideNav").slideDown();});$("nav .asideNav").mouseleave(function(){$(".asideNav").slideUp();});});</script></head><body><!--header--><header><!--topNavBg--><div class="topNavBg"><div class="wrap"><!--topLeftNav--><ul class="topLtNav"><li><a href="login.html" class="obviousText">亲,请登录</a></li><li><a href="register.html">注册</a></li><li><a href="#">移动端</a></li></ul><!--topRightNav--><ul class="topRtNav"><li><a href="user.html">个人中心</a></li><li><a href="cart.html" class="cartIcon">购物车<i>0</i></a></li><li><a href="favorite.html" class="favorIcon">收藏夹</a></li><li><a href="user.html">商家中心</a></li><li><a href="article_read.html" class="srvIcon">客户服务</a></li><li><a href="union_login.html">联盟管理</a></li></ul></div></div><!--logoArea--><div class="wrap logoSearch"><!--logo--><div class="logo"><h1><img src="{{ static_url('img/logo.png')}}"/></h1></div><!--search--><div class="search"><ul class="switchNav"><li class="active" id="chanpin">产品</li><li id="shangjia">商家</li><li id="zixun">搭配</li><li id="wenku">文库</li></ul><div class="searchBox"><form><div class="inputWrap"><input type="text" placeholder="输入产品关键词或货号"/></div><div class="btnWrap"><input type="submit" value="搜索"/></div></form><a href="#" class="advancedSearch">高级搜索</a></div></div></div><!--nav--><nav><ul class="wrap navList"><li class="category"><a>全部产品分类</a><dl class="asideNav indexAsideNav"><dt><a href="channel.html">女装</a></dt><dd><a href="#">夏装新</a><a href="#">连衣裙</a><a href="#">T恤</a><a href="#">衬衫</a><a href="#">裤子</a><a href="#">牛仔裤</a><a href="#">背带裤</a><a href="#">短外套</a><a href="#">时尚外套</a><a href="#">风衣</a><a href="#">毛衣</a><a href="#">背心</a><a href="#">吊带</a><a href="#">民族服装</a></dd><dt><a href="channel.html">男装</a></dt><dd><a href="#">衬衫</a><a href="#">背心</a><a href="#">西装</a><a href="#">POLO衫</a><a href="#">马夹</a><a href="#">皮衣</a><a href="#">毛衣</a><a href="#">针织衫</a><a href="#">牛仔裤</a><a href="#">外套</a><a href="#">夹克</a><a href="#">卫衣</a><a href="#">风衣</a><a href="#">民族风</a><a href="#">原创设计</a><a href="#">大码</a><a href="#">情侣装</a><a href="#">开衫</a><a href="#">运动裤</a><a href="#">工装裤</a></dd></dl></li><li><a href="index.html" class="active">首页</a></li><li><a href="#">时尚搭配</a></li><li><a href="channel.html">原创设计</a></li><li><a href="channel.html">时尚代购</a></li><li><a href="channel.html">民族风</a></li><li><a href="information.html">时尚搭配</a></li><li><a href="library.html">搭配知识</a></li><li><a href="#">促销专区</a></li><li><a href="#">其他</a></li></ul></nav></header><script>$(document).ready(function(){//测试效果,程序对接如需变动重新编辑$(".switchNav li").click(function(){$(this).addClass("active").siblings().removeClass("active");});$("#chanpin").click(function(){$(".inputWrap input[type='text']").attr("placeholder","输入产品关键词或货号");});$("#shangjia").click(function(){$(".inputWrap input[type='text']").attr("placeholder","输入商家店铺名");});$("#zixun").click(function(){$(".inputWrap input[type='text']").attr("placeholder","输入关键词查找文章内容");});$("#wenku").click(function(){$(".inputWrap input[type='text']").attr("placeholder","输入关键词查找文库内容");});});</script><section class="wrap" style="margin-top:20px;overflow:hidden;"><table class="order_table"><tr><th><input type="checkbox"/></th><th>产品</th><th>名称</th><th>属性</th><th>单价</th><th>数量</th><th>小计</th><th>操作</th></tr>{% set total = 0 %}{% for order in  orders %}<tr><td class="center"><input type="checkbox"/></td><td class="center"><a href="product.html"><img src="{{order['img']}}" style="width:50px;height:50px;"/></a></td><td><a href="product.html">{{order['name']}}</a></td><td><p>{{order['type']}}</p></td>{% if order['price'] < 100 %}<td class="center"><span class="rmb_icon">优惠力度很大</span></td>{% else %}<td class="center"><span class="rmb_icon">{{order['price']}}</span></td>{% end %}<td class="center"><span>{{ order['num'] }}</span></td><!-- <td class="center"><strong class="rmb_icon">{{ order['price']*order['num'] }}</strong></td> --><td class="center"><strong class="rmb_icon">{{ count_price(order['price'],order['num']) }}</strong></td><td class="center">{% raw order['opts'] %}</td>  <!-- html 解析-->{{ total = total + count_price(order['price'],order['num']) }}</tr>{% end %}</table><div class="order_btm_btn"><a href="index.html" class="link_btn_01 buy_btn"/>继续购买</a><a href="order_confirm.html" class="link_btn_02 add_btn"/>共计金额<strong class="rmb_icon">{{ total }}</strong>立即结算</a></div></section><!--footer--><footer><!--help--><ul class="wrap help"><li><dl><dt>消费者保障</dt><dd><a href="article_read.html">保障范围</a></dd><dd><a href="article_read.html">退换货流程</a></dd><dd><a href="article_read.html">服务中心</a></dd><dd><a href="article_read.html">更多服务特色</a></dd></dl></li><li><dl><dt>新手上路</dt><dd><a href="article_read.html">保障范围</a></dd><dd><a href="article_read.html">退换货流程</a></dd><dd><a href="article_read.html">服务中心</a></dd><dd><a href="article_read.html">更多服务特色</a></dd></dl></li><li><dl><dt>付款方式</dt><dd><a href="article_read.html">保障范围</a></dd><dd><a href="article_read.html">退换货流程</a></dd><dd><a href="article_read.html">服务中心</a></dd><dd><a href="article_read.html">更多服务特色</a></dd></dl></li><li><dl><dt>服务保障</dt><dd><a href="article_read.html">保障范围</a></dd><dd><a href="article_read.html">退换货流程</a></dd><dd><a href="article_read.html">服务中心</a></dd><dd><a href="article_read.html">更多服务特色</a></dd></dl></li></ul><dl class="wrap otherLink"><dt>友情链接</dt><dd><a href="#" target="_blank">新码笔记</a></dd><dd><a href="#" target="_blank">DethGhost</a></dd><dd><a href="#">当当</a></dd><dd><a href="#">优酷</a></dd><dd><a href="#">土豆</a></dd><dd><a href="#">新浪</a></dd><dd><a href="#">钉钉</a></dd><dd><a href="#">支付宝</a></dd></dl><div class="wrap btmInfor"><p>© 2060 版权所有 网络文化经营许可证:浙网文[2060]***-027号 增值电信业务经营许可证:浙B2-200***24-1 信息网络传播视听节目许可证:1109***4号</p><address>联系地址:北京尚学堂科技有限公司</address></div></footer></body></html>

后端

from tornado import web,template
from tornado import ioloopclass IndexHandler(web.RequestHandler):def count(self,price,num):return price*numdef get(self):orders=[{   'id':1,'name':'MacPro 2060','type':'32G','price':9999,'num':1,'img':'static/img/goods.jpg','opts':'<a href="delete?id=3">删除</a>'},{'id':2,'name':'HuaWei Mate 2060','type':'512G','price':6666,'num':1,'img':'static/img/goods007.jpg','opts':'<a href="delete?id=3">删除</a>'},{   'id':3,'name':'Sony耳机','type':'立体混音','price':66,'num':2,'img':'static/img/goods008.jpg','opts':'<a href="delete?id=3">删除</a>'},]self.render('shop.html',orders=orders,count_price=self.count)settings={'static_path':'./static/','static_url_prefix':'/static2/','template_path':'./templates'
}if __name__ == '__main__':app = web.Application([('/',IndexHandler),],debug=True,**settings)app.listen(8000)ioloop.IOLoop.current().start()ok     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c 一,二,三维数组的定义和赋值

1. 定义数组必须指定数组的大小&#xff0c;也就是用多少存储空间来存储此数组 2.定义数组必须用数组的标准格式定义&#xff1a;数组名下标的形式 3.只有字符串可以用指针来定义 4.可以把c 中一切数和struct 理解为char 数组 比如int 就是4字节的char数组 #include <…

编程语言的演进历程与未来发展趋势

第一代 编程语言的发展历程起源于早期的机器语言阶段&#xff0c;这是一种由二进制代码构成的计算机能够直接解读并执行的语言。然而&#xff0c;鉴于其过于复杂且难以理解&#xff0c;故这一时代的语言并不常为人类所采纳。 第二代 紧接着产生的第二代语言旨在简化编程过程…

1001 害死人不偿命的(3n+1)猜想

卡拉兹(Callatz)猜想&#xff1a; 对任何一个正整数 n&#xff0c;如果它是偶数&#xff0c;那么把它砍掉一半&#xff1b;如果它是奇数&#xff0c;那么把 (3n1) 砍掉一半。这样一直反复砍下去&#xff0c;最后一定在某一步得到 n1。卡拉兹在 1950 年的世界数学家大会上公布了…

C++ //习题2.5 请写出下列表达式的值。

C程序设计 &#xff08;第三版&#xff09; 谭浩强 习题2.5 习题2.5 请写出下列表达式的值。 (1) 3.5 * 3 2 * 7 - ‘a’ (2) 26 / 3 34 % 3 2.5 (3) 45 / 2 (int)3.14159 / 2 (4) a b (c a 6) 设a的初值为3 (5) a 3 * 5, a b 3 * 2 (6) (int)(a 6.5) % 2 …

UI自动化测试工具的定义及重要性

UI自动化测试工具在现代软件开发中起着不可或缺的作用。它们能够提高测试效率、减少人为错误、提供全面的测试覆盖&#xff0c;并支持持续集成。通过有效使用UI自动化测试工具&#xff0c;开发团队可以提高软件质量&#xff0c;提供更可靠的应用程序&#xff0c;满足用户的需求…

C语言之数组精讲(2)

目录 数组的复制 输入数组元素的值 对数组的元素进行倒序排列 使用数组进行成绩处理 对象式宏 数组元素的最大值和最小值 赋值表达式的判断 数组的元素个数 结语 数组的复制 我们把数组中的元素全部复制到另一个数组中。 #include<stdio.h>int main() {int i;int…

SwinIR: Image Restoration Using Swin Transformer

SwinIR 简介 论文地址&#xff1a;SwinIR: Image Restoration Using Swin Transformer 代码&#xff1a;SwinIR ​ 本文提出了一个基于swin transformer的图像超分模型swinIR。其中SwinIR分为三部分&#xff1a;浅层特征提取、深层特征提取和高质量图像重建模块。 现阶段问…

WordPress如何通过header给页面发送原生HTTP头

在WordPress中&#xff0c;你可以使用header() 函数来发送原生HTTP头。这个函数通常在主题文件&#xff08;例如header.php&#xff09;或者插件中使用。以下是一个简单的例子&#xff0c;演示如何在WordPress中使用header() 函数发送原生HTTP头&#xff1a; <?php // 在主…

19.java程序设计-基于SpringBoot的博客管理系统的设计与实现

摘要 随着信息技术的迅速发展&#xff0c;博客作为一种重要的信息传播和交流工具&#xff0c;逐渐在互联网上占据重要地位。为了满足用户对个性化博客管理的需求&#xff0c;本研究设计并实现了一种基于Spring Boot框架的博客管理系统。 本系统通过采用前后端分离的架构&…

【算法题】密钥格式化 (js)

!](https://img-blog.csdnimg.cn/direct/bf9a3d781a8043c997593260c0a8306f.png) 第一部分的字符可以少于… const str "5F3Z-2e-9w"; const str1 "2-5g-3-J"; function solution(num, str) {const arr str.split("-");const head arr[0];…

【C++11(三)】智能指针详解--RAII思想循环引用问题

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; C11 1. 前言2. 为什么要有智能指针?3. RAII思想…

30.如何在Spring所有Bean创建完后做扩展?

如何在Spring所有Bean创建完后做扩展? 哪里才算所有的bean创建完了。 首先是所有的配置bean会注册成BeanDefinition 然后根据BeanDefinition进行循环调用一个一个的getBean进行生产。 循环完所有的BeanDefiniton,通过BeanFactory的getBean方法生成所有的Bean 这个循环结…

LightDB - 支持substring_index 函数[mysql兼容]

从 23.4 版本开始&#xff0c; LightDB 支持 mysql 的substring_index 函数。下面对这个函数进行介绍 substring_index(str, delim, count ) 这个函数用于从指定字符串str中返回到达分隔符delim出现次数(count)之前的子字符串。。具体见之后用例&#xff1a; mysql 中介绍&a…

【BUG】微信小程序image不会随着url动态变化

问题描述&#xff1a; 第一次打开界面&#xff0c;显示的是默认头像而不是用户头像&#xff0c;似乎image里面的src只要第一次有值就不会再更新了 解决 不要给src里面的变量设置初始值&#xff0c;而是直接赋空值

信息安全、网络安全和数据安全的相互关系

最近正在开展安全方面的相关工作&#xff0c;因此就对这些概念做了一些分析&#xff0c;参考各种介绍和书籍&#xff0c;结合自身的认识&#xff0c;总结起来如下&#xff0c;信息安全、网络安全、数据安全和基础设施安全的关系究竟是什么&#xff0c;信息安全概念最大&#xf…

DevOps搭建(七)-安装Jenkins详细步骤

这里我们用Docker进行安装 1、拉取Jenkins镜像 Jenkins download and deployment 选择LTS长期支持的版本,接着点击Docker链接进入 找到上面的版本,并copy拉取镜像的命令 docker pull jenkins/jenkins:2.426.1-lts 2、docker-compose安装Jenkins 首先创建安装目录/home/f…

STM32 cubeMX 呼吸灯实验

文章代码使用 HAL 库。 文章目录 一、1.PWM原理二、LED 原理图三、使用cubemx 配置 led四、PWM 相关函数五、PWM占空比占空比计算六、PWM 呼吸灯重要代码总结 呼吸灯 一、1.PWM原理 PWM全称为脉冲宽度调制&#xff08;Pulse Width Modulation&#xff09;&#xff0c;是一种常…

拥有大量虾皮买家号有哪些好处

拥有众多Shopee买家账号&#xff0c;无疑是卖家们获取极大优势的一项策略。多账号的运用不仅有助于卖家在Shopee平台上获得更为丰富的流量&#xff0c;更能够在关键词排名和销售表现等方面为其带来显著提升。 首先&#xff0c;多个Shopee买家账号的灵活运用&#xff0c;使卖家能…

前后端(JAVA)实现AES对称加解密方式

文章目录 前后端&#xff08;JAVA&#xff09;实现AES对称加解密方式1 对称加密分类以及概括1.1 加密安全等级 DES < 3DES < AES < RC1.2 DES1.3 3DES1.4 AES1.5 RC 2 前后端实现AES对称加解密方式3 后端AES对称加解密&#xff08;ECB和CBC模式&#xff09;工具类4 前…

【Python百宝箱】从传感器到云端:深度解析Python在物联网中的多面应用

迈向智能未来&#xff1a;Python与物联网生态系统的完美融合 前言 随着物联网技术的不断发展&#xff0c;Python作为一种灵活且强大的编程语言&#xff0c;逐渐成为物联网开发的重要工具之一。本文将深入探讨物联网领域中常用的Python库和框架&#xff0c;涵盖了从轻量级通信…