tornado 04 模板

本文介绍了Tornado Web框架中的模板系统,包括基本概念、语法符号、转义机制及静态文件引用等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、模板

#模板就是一个HTML文件,只是其中添加了模板语法,需要服务器的渲染才能正常显示数据
#通过render可以返回一个html网页,不过那都是固定的页面,固定的数据,如果数据是不确定的,是会不断改变的,该如何做?
#先把页面写好,然后预留出固定的位置,在需要的时候再填入数据即可
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('template')
        self.render('lesson2.html')

    def post(self, *args, **kwargs): #在页面内动态地传入参数
        name = self.get_body_argument('name','no')
        # self.write(name)
        self.render('lesson04_templates.html', #提交以后的页面应该跳转为这个页面,而不是仅仅输出一个name
                    username = name #提取body属性,将name赋值给username
                    )
#模板 
#在tornado中,模板就是一个html文件,但是模板通过模板语法,由tornado服务渲染之后,可以动态地往页面填入数据
#tornado自带模板语法,不需要再用其他的模板插件

二、模板符号

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('template')
        self.render('lesson2.html')

    def post(self, *args, **kwargs): #在页面内动态地传入参数
        name = self.get_body_argument('name','no')
        urllist = [
            ('http://www.baidu.com','去百度'),
            ('http://www.shiguangkey.com','去时光'),
            ('http://www.zhihu.com','去知乎')
        ]
        # self.write(name)
        self.render('lesson04_templates.html', #提交以后的页面应该跳转为这个页面,而不是仅仅输出一个name
                    username = name ,#提取body属性,将name赋值给username
                    time = time,
                    urllist = urllist
                    )
<body>
#代表一个python表达式
hello  {{ username }} #大括号可出输出变量的值
<br>
{{ 1+1 }} # 输出计算结果
<br>
{{ a = time.time() }} #输出执行方法(当前的时间戳),必须加括号,不然就是一个函数对象
<br>

#代表一个指令
{% if username != 'xuwei' %}
    欢迎{{ username}} 登录
{% else %}}
    请登录
{% end %}   #使用if必须要用end结束,因为模板跟python一样不是以缩进来约束代码块
<br>

#代表一个注释
<!--{{ a = time.time() }}--> #在这里虽然被注释掉了,但是在页面运行的时候,页面不会显示,但是这个表达式还是运行了,只不过是在源代码会显示时间戳
<!--{#a = time.time() #}-->  #这样才是注释,页面不会显示,源代码也不会
<br>

#代表输出源码。不执行,加个!即可
{{! 1+1 }} #这样可以向页面输出源码,不会输出运行结果

#for循环
{% for i in urllist  %}
    {{ i }}
    <a href="{{ i[0] }}" target="_blank"> {{ i[1]}}</a>
{%  end %}

# while循环
{% set a = 0 %} #在调用while是时候需要定义a,这就需要使用set
{% while a <5 %}
    {{ a }}<br>
    {% set a += 1 %}
{% end %}}

</body>

三、模板的转义

#如果给的是一个html文件,模板会不会解析
    def post(self, *args, **kwargs): 
        name = self.get_body_argument('name','no')
        urllist = [
            ('http://www.baidu.com','去百度'),
            ('http://www.shiguangkey.com','去时光'),
            ('http://www.zhihu.com','去知乎')
        ]
        atga = """<a href="https://www.baidu.com" target="_blank"> _____走 去百度_____</a>""" #这是一个字符串
        # self.write(name)
        self.render('lesson04_templates.html',
                    username = name ,
                    time = time,
                    urllist = urllist,
                    atga = atga
                    )

application = tornado.web.Application(
        handlers=[
            (r'/tem',MainHandler),
        ],
        template_path = 'templates',
        autoescape = None, #在这里面加上这个也可以去除所有的转义       全局去转义
        debug=True
    )
<!DOCTYPE html>
{% autoescape None %}  #对所有的内容都去除转义,不需要在下面再添加了,也可以在前民               模板级别去转义
<html lang="en">
<head>
<br>
{{ atga}} #这样会直接把源码显示在网页中,不解析 ;会将字符串里面的标签转化为其它的符号,进而也就不解析了,但是显示在也页面的时候又会解析成原来的标签(这便就是转义)
{% raw atga %} #加个一个raw 就可以解析(局部去除上面的转义)了          局部去转义

<br>
{{ escape(atga) }} #这样依然会转义

四、静态文件引用

#有时候需要返回一些图片,那么如何返回这些静态文件呢

#1、先导入图片,放到static/images/  2、然后在application中设置好静态文件的路径 static_path='static'     3 、在html文件中用两种方法导入
application = tornado.web.Application(
        handlers=[
            (r'/tem',MainHandler),
        ],
        template_path = 'templates',
        static_path= 'static', #标准写法,设置静态文件的路径
        autoescape = None,
        debug=True

    )
{% if username != 'no' %}
    欢迎{{ username}} 登录
    <img src="{{ static_url('images/1.jpg')}}" width="250" height="250"> #这两者的区别在于url不同,再次请求是,这个路径会直接在缓存中找图片,不用重新下载,效率更高一点
    #使用此方法时,tornado会自动给静态文件添加版本号,如果版本号更改了,浏览器会自动地缓存新的文件
    <img src="static/images/1.jpg"  width="250" height="250">
    #在tornado模块中,static是个关键字,能够自动替换成static_path后的内容

{% end %}
</body>

 

转载于:https://www.cnblogs.com/xuchengcheng1215/p/8982524.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值