【问题标题】:Python webapp to set all query vars to a js objectPython webapp将所有查询变量设置为js对象
【发布时间】:2017-01-09 19:44:37
【问题描述】:

我正在使用 Python 和 web.py 构建一个简单的 Web 应用程序。我当前的挑战是获取所有查询变量 (web.input()) 并在 HTML 模板中设置一个 JavaScript 对象。但是,我不知道如何确保它呈现正常而不是带有编码的长字符串。

谢谢一百万!

我在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>

【问题讨论】:

    标签: python web.py


    【解决方案1】:

    你已经接近了:

    1. 将您对test = web.input() 的调用移至GET() 方法中,而不是文件顶部。那只是一个错误。 (我知道这只是您的示例代码,但它不起作用。)
    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 设置为一个对象,而不仅仅是一个字符串。

    【讨论】:

    • 感谢@Peter,这很有帮助!但是我现在得到的结果仍然包含 有没有一种简单的方法来摆脱它?非常感谢!
    • 当然。 webpy 的&lt;Storage&gt; 类派生自python dict。只要您的对象不复杂(并且 web.input() 不复杂),只需将其转换为 dict:foo = dict(web.input())。然后在您的模板中,$:foo 的值将可用作 javascript 代码中的 json:var my_json = $:foo;
    猜你喜欢
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多