0

我正在尝试使用 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行)

我无法弄清楚语法错误。它列出了一行是我的 unordered list 的结束标记,这没有任何意义,因为它超过了所有 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 网站上的模板教程。我认为一旦你使用了“代码:”,你就会使用标准的 python 语法,然后一旦你退出缩进块,它应该是标准的 HTML。有人可以解释这种语法,因此我的错误。

4

1 回答 1

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
于 2014-01-14T14:55:23.427 回答