我正在使用Python和web.py构建一个简单的Web应用程序。我目前的挑战是采用所有查询变量(web.input()
)并在HTML模板中设置JavaScript对象。但是,我不知道如何确保将其呈现为OK而不是带有编码的长字符串。
万分感谢!
我在app.py
,模板HTML和内容HTML中有以下代码:
app.py
:
import web
urls = (
'/hello', 'hello',
'/bye/', 'bye'
)
app = web.application(urls, globals(), autoreload=True)
#test = "testwaarde"
test = web.input()
render = web.template.render('templates/', base='layout')
class hello:
def GET(self):
return render.index("Templates demo",test, "Hello", "A long time ago...")
class bye:
def GET(self):
return render.hell_form("Templates demo",test, "Bye", "14", "8", "25", "42", "19")
if __name__ == "__main__":
app.run()
模板:
$def with (page)
<html>
<head>
<title>$page.title</title>
<!-- Digital Data Layer -->
<script>
var test = "{{$page.path}}"
var digitalData = {
'page':{
'path': '$page.path'
}
};
</script>
</head>
<body>
<p>You are visiting page <b>$page.name</b>.</p>
$:page
</body>
</html>
索引HTML:
$def with (title, **path,name, content)
$var title:$title
$var name:$name
$var path:$path
<p>$content</p>
答案 0 :(得分:0)
你很亲密:
test = web.input()
范围内的GET()
方法,而不是文件顶部。那只是一个bug。 (我知道这只是你的示例代码,但它不起作用。)在index.html
内,请使用
$var path = path
使用var path: $path
将模板变量设置为路径的字符串表示。您想将其设置为 dict 。这是冒号和等号之间的一个区别。其次,因为它是'=',右侧被解释为python,所以没有前导'$'。
在您的模板layout.html
中,将您的javascript更改为类似于:
var test = "$:page.path";
var digitalData = {
'page': {
'path': $:page.path
}
};
您希望使用$:
而不是$
来转义数据。这就是你看到编码值的原因。此外,您不希望用引号括起最终$:page.path
以将page.path
设置为对象,而不仅仅是字符串。