tornado模板机制_在模板里面编程

18 篇文章 0 订阅
5 篇文章 0 订阅

模板的名字空间

tornado的模板机制是出了名的灵活.

我以前的一篇博客已经讲过了,原因是因为,tornado渲染生成模板对象的时候,是把html文件一句句的读入python中,然后按照python的语句来解析执行.所以,tornado里面几乎可以使用所有的python语句来进行编程.

而且在模板中,有一个名字空间, 我们可以去get_template_namespace这个方法去查看, 所以在模板中,我们可以任意使用一些预定义好的变量.

def get_template_namespace(self):
        """Returns a dictionary to be used as the default template namespace.

        May be overridden by subclasses to add or modify values.

        The results of this method will be combined with additional
        defaults in the `tornado.template` module and keyword arguments
        to `render` or `render_string`.
        """
        namespace = dict(
            handler=self,
            request=self.request,
            current_user=self.current_user,
            locale=self.locale,
            _=self.locale.translate,
            static_url=self.static_url,
            xsrf_form_html=self.xsrf_form_html,
            reverse_url=self.reverse_url
        )
        namespace.update(self.ui)
        return namespace
当然,我们也可以重载这个方法,然后加入,修改一些新的变量,这些变量在模板里是全局可用的.

模板里传参数并表达成html的表达式

有时候,我们需要传入参数,然后定制一些html标签,该怎么办?

有一个思路:

(1)实现一个ui module组件.

(2)在这个组件中渲染一个字符串表达式. 比如 "class="bababa""

这样我们就可以将这个字符串转化成html的表达式了.

python是强类型语言.

我们可以在模板中使用{{str(a)}}, python的任何内置变量都是可以在模板中使用的.
{{"1"+1}}这样会出错,因为我们的python是强类型语言,不会进行隐式的,含糊的转换.不同类型之间不能进行操作.

小注:
{%set buttion=1%}  正确
{%set buttion={
1:1}
%}   正确

{%set

 buttion=1%}  错误


这样在ui模板中渲染的时候{{"..."}}, 就不是表达式了,

比如: 如果a="fa fa"

在ui 渲染 key  = {{a}}的时候, 结果是 key = "fa" fa 

正确应该是: key = "{{a}}"  , 结果: key = "fa fa"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值