Webpy模板函数语法

时间:2013-10-19 16:37:07

标签: templates syntax web.py

我正在尝试使用Webpy编写Web应用程序。我的应用程序获取有关以太或关闭的输出的信息。我想使用图像来显示“开”按钮或“关闭”按钮。 发送到Webpy模板的数据是输出字典(键定义输出)和值(字符串类型),值为“1”表示“开”或“0”表示关闭。 我的第一个想法是在我的模板中编写一个函数,根据这样的值返回图像文件:

template_tester_simple.py:

import web
render = web.template.render('templates/')
urls = ('/', 'index')
template_tester_simple = web.application(urls, globals())


class index: 
    def GET(self):
        return render.test_func(data)


def add_data():
    data = {'currSet':'75','currTemp':'60','currMode':'Off',
'Cool':'1', 'Heat':'1', 'RevValve':'1', 'EmHeat':'1','Fan':'1',}            
    return data        

data = add_data()
if __name__=="__main__":
    web.internalerror = web.debugerror
    template_tester_simple.run()

和我的test_func.html模板:

$def with (data)

<!DOCTYPE html>
    <html>
    <head>
        <title>Test</title>
    </head>
    $code:
        def getSwitchImg(item):
            x=""
        if (item=='1'):
            x="<img src= '../static/switch_on.png'></img>"
        else: "<img src= '../static/switch_off.png'></img>"
        return x

<body>
        <ul>
                <li><strong>Cooling</strong><p>
                $getSwitchImg($data['Cool'])
                </p></li>
                            <li><strong>Reversing Valve</strong><p>
                $getSwitchImg($data['RevValve'])
                </p></li>

        </ul>
</body>

这将返回语法错误:

在/ / 语法无效模板追溯:文件'templates / test_func.html',第23行无(test_func.html,第23行)

我无法弄清楚语法错误。它列出了一条行,它是我的无序列表的结束标记,由于它超过了所有的python代码,因此没有任何意义。所以它一定是WebPy模板系统中的一些我不明白的东西。功能块是否未正确“关闭”? 出于沮丧,我使用相同的template_tester_simple.py将模板更改为以下内容:

$def with (data)

<!DOCTYPE html>
    <html>
    <head>
        <title>Test</title>
    </head>

    <body>
            <ul>
                <li><strong>Cooling</strong>
            $if data['Cool'] == '1':
                <img src="../static/switch_on.png" height="15px" width="40px"></img>
            $else:
                <img src="../static/switch_off.png" height="15px" width="40px"></img>
          </li>
            <li><strong>Heating</strong>
            $if data['Heat'] == '1':
                <img src="../static/switch_on.png" height="15px" width="40px"></img>
            $else:
                <img src="../static/switch_off.png" height="15px" width="40px"></img>
          </li>
           </ul>
        </body>

这有效,但我没有定义我想要使用的功能。我被迫一遍又一遍地复制/粘贴相同的代码。当我进一步开发这个项目时,我计划增加更多的开关,因此需要更多的数字输出。如果我能让第一个模板代码起作用,它将使我的应用程序的扩展变得更加容易。另外,我想了解与WebPy模板中的函数相关的语法。我在Webpy网站上阅读过templator教程。我认为一旦你使用“代码:”你就会使用标准的python语法,那么一旦你从缩进的块中走出来,它应该是标准的HTML。有人可以解释这个语法,因此我的错误。

1 个答案:

答案 0 :(得分:0)

我不知道这是否就像你在这里复制/粘贴你的代码一样,但我在这里看到了一个缩进问题。

    def getSwitchImg(item):
        x=""
    if (item=='1'):
        x="<img src= '../static/switch_on.png'></img>"
    else: "<img src= '../static/switch_off.png'></img>"
    return x

应该是:

    def getSwitchImg(item):
        x=""
        if (item=='1'):
           x="<img src= '../static/switch_on.png'></img>"
        else: 
           x="<img src= '../static/switch_off.png'></img>"
        return x