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

这篇具有很好参考价值的文章主要介绍了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>

后端文章来源地址https://www.toymoban.com/news/detail-756128.html

from tornado import web,template
from tornado import ioloop

class IndexHandler(web.RequestHandler):
    def count(self,price,num):
        return price*num
    def 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     

到了这里,关于8-tornado中模板的使用(通过字符串返回、通过模板Template返回、通过模板render返回)、模板案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • P3375 【模板】KMP 字符串匹配

    给出两个字符串 s 1 s_1 s 1 ​ 和 s 2 s_2 s 2 ​ ,若 s 1 s_1 s 1 ​ 的区间 [ l , r ] [l, r] [ l , r ] 子串与 s 2 s_2 s 2 ​ 完全相同,则称 s 2 s_2 s 2 ​ 在 s 1 s_1 s 1 ​ 中出现了,其出现位置为 l l l 。 现在请你求出 s 2 s_2 s 2 ​ 在 s 1 s_1 s 1 ​ 中所有出现的位置。 定义一个字符串 s s s 的

    2024年02月14日
    浏览(53)
  • spring boot 单元测试JUnit5使用MockMvc调用get请求,post请求,设置head请求头,解析返回值json和字符串

    spring boot 单元测试JUnit5使用MockMvc调用get/post接口 源码地址:https://gitcode.net/qq_39339588/springboot.git 1. 先准备一份controller,一会儿供测试调用 2. MockMvc测试调用get请求接口 两个注解说明 @SpringBootTest // 加测试类上,标明是测试的类 @AutoConfigureMockMvc // 支持对MockMvc对象的注入和配置,

    2024年02月14日
    浏览(50)
  • GaussDB(DWS)字符串处理函数返回错误结果集排查

    摘要: 在使用字符串处理函数时,有时会出现非预期结果的场景。在排除使用问题后,应该从encoding和数据本身开始排查。 本文分享自华为云社区《GaussDB(DWS)字符串处理函数返回错误结果集排查》,作者: -CHEN111- 。 在使用字符串处理函数时,有时会出现非预期结果的场景。

    2024年02月03日
    浏览(43)
  • Delphi中返回由空格分隔的字符串中单词的总数

    有如下一个字符串: ‘苹果 香蕉 火龙果’ 是3个词语,返回3 如果\\\"苹果 香蕉\\\"用双引号就表示是一个整体算1个词语,返回2

    2023年04月19日
    浏览(78)
  • 记录-Vue.js模板编译过程揭秘:从模板字符串到渲染函数

    Vue.js是一个基于组件化和响应式数据流的前端框架。当我们在Vue中编写模板代码时,它会被Vue编译器处理并转换为可被浏览器解析的JavaScript代码。Vue中的模板实际上是HTML标记和Vue指令的组合,它们会被Vue编译器处理并转化为一个JavaScript渲染函数。 Vue中的模板编译分为两个阶

    2023年04月14日
    浏览(39)
  • JDK 21 发布,新特性概览及字符串模板详细介绍

    Java 21 已于 2023 年 9 月 19 日发布,是 Oracle 标准 Java 实现的下一个长期支持(LTS)版本。Java 21 具有以下 15 项新特性。 430: String Templates (Preview) 字符串模板,可以像其他语言那样子方便的做字符串拼接,是+号,StringBuilder,MessageFormat之外更方便的字符串拼接方法。 431: Sequenc

    2024年02月02日
    浏览(52)
  • 【SQL SERVER】Fn_SplitStr 逗号相隔的字符串返回多行

    运行结果如下:

    2024年01月23日
    浏览(39)
  • 对输入的字符串通过空格分隔

    场景:想要对输入的字符串通过空格分隔,但是不同字符串之间的空格个数不一样,因此可以使用正则表达式进行分隔。 str.trim().split(/\\\\s+/) 这行代码可以分解成两部分: str.trim() : 这个调用会移除字符串 str 的两端空格,并返回处理后的字符串。例如,对于字符串 \\\" hello wor

    2024年02月08日
    浏览(51)
  • 如何将后端带过来的字符串通过‘,’号作为判断依据,分割字符串然后生成数组

    在实际开发工程中我们会遇到我们调用后端接口获取图片、文件、视频甚至选择的对象时,如果是这样的: 这种数据类型如果想渲染在html中的话就会很麻烦,我们可以通过\\\",\\\"号为切割点将它放入数组中,通过列表进行渲染 由于实际项目中的数据很多可能说起来会很乱,所以

    2024年01月20日
    浏览(51)
  • C语言之通过指针操作字符串

    下面我们来学习通过指针来灵活操作字符串的方法 我们用对指针的遍历来实现判断字符串的长度 在函数形参的声明中由使用[ ]变为*,这些声明方式是一样的,只是表面上的一些变化,实质上并没有什么变化。 程序中发生实质性变化的事函数体,让我们结合下图来看(以输入

    2024年01月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包