Python webapp将所有查询变量设置为js对象

时间:2017-01-09 19:44:38

标签: python web.py

我正在使用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>

1 个答案:

答案 0 :(得分:0)

你很亲密:

  1. 将您的呼叫转移到test = web.input()范围内的GET()方法,而不是文件顶部。那只是一个bug。 (我知道这只是你的示例代码,但它不起作用。)
  2. index.html内,请使用

    $var path = path
    

    使用var path: $path将模板变量设置为路径的字符串表示。您想将其设置为 dict 。这是冒号和等号之间的一个区别。其次,因为它是'=',右侧被解释为python,所以没有前导'$'。

  3. 在您的模板layout.html中,将您的javascript更改为类似于:

    var test = "$:page.path";
    var digitalData = {
        'page': {
            'path': $:page.path
         }
    };
    

    您希望使用$:而不是$来转义数据。这就是你看到编码值的原因。此外,您不希望用引号括起最终$:page.path以将page.path设置为对象,而不仅仅是字符串。