我正在尝试使用 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。有人可以解释这种语法,因此我的错误。