2017-01-09 14 views
0

Я создаю простое веб-приложение с Python и web.py. Моя текущая задача - взять все запросы vars (web.input()) и задать объект JavaScript в шаблоне HTML. Тем не менее, я не знаю, как обеспечить, чтобы это получилось ОК, а не длинной строкой с кодировкой.Python webapp для установки всех запросов к объекту js

Спасибо, миллион!

У меня есть следующий код в 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> 
 
    \t var test = "{{$page.path}}" 
 
    var digitalData = { 
 
     'page':{ 
 
     \t '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

Вы близки:

  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 объекту, а не просто строке.

+0

Спасибо @Peter, это очень помогает! однако результат, который я получаю, по-прежнему содержит Есть ли простой способ избавиться от этого? Очень признателен! – Arjen

+0

Несомненно. Класс '' '' '' происходит от python dict. Пока ваш объект не является сложным (и web.input() не является сложным), просто добавьте его в dict: 'foo = dict (web.input())'. Затем в вашем шаблоне значение '$: foo' будет использоваться как json в коде javascript:' var my_json = $: foo; ' – pbuck