2016-05-16 3 views
5

Я посмотрел на подобные форумы, но не смог найти ни одно из решений для работы. Я пытаюсь передать переменные из фляги в файл java-скрипта. Эти значения затем будут использоваться для PubNub из моего javascript-файла.Передача переменных из фляжки в javascript

Вот часть моего кода Python:

@app.route("/mysettings/") 
def user_settings(): 
     return render_template('Settings.html', project_name = session['project_name'] , publish_key = session['publish_key'] , subscribe_key = session['subscribe_key']) 

Вот часть моего кода яваскрипта (app.js):

var settings = { 
     channel: {{project_name}}, 
     publish_key: {{publish_key}}, 
     subscribe_key: {{subscribe_key}} 
    }; 

этот код работает, если я использую его в моих настройках. html, но не в файле app.js.

ответ

10

Ответы mobiusklein довольно хороши, но есть «взлом», который вы должны рассмотреть. Определите свой Javascript-метод для получения параметров и отправки данных в качестве параметров вашей функции.

main.py

@app.route('/') 
def hello(): 
    data = {'username': 'Pang', 'site': 'stackoverflow.com'} 
    return render_template('settings.html', data=data) 

app.js

function myFunc(vars) { 
    return vars 
} 

settings.html

<html> 
    <head> 
     <script type="text/javascript" {{ url_for('static', filename='app.js')}}></script> 
     <script type="text/javascript"> 
      myVar = myFunc({{vars|tojson}}) 
     </script> 
    </head> 
</html> 
+1

Это кажется нормальным для меня, а не рубить. –

+1

vars/tojson: это спасло мою жизнь как не-веб-разработчика: D Спасибо – Oxydron

1

Причина: jinja2 должен быть использован для замены, который из вашего кода, кажется, не происходит.

Скорее всего, вы подаете app.js в качестве статического файла, а это значит, что он никогда не смотрит на машинное оборудование для шаблонов, просто служил как есть.

Вы можете сделать то, что вы описываете, служа app.js из URL, который привязан к действию, которое проходит содержимое app.js через render_template функции КОЛБЫ, в выполнении jinja2 замены, и вся другая информация, кастомизацию, но это означает, что jinja2 должен проанализировать весь файл, что может быть дорогостоящим.

Возможно, вы попытаетесь передать эти переменные, используя запрос AJAX, на который отвечает действие, которое отправляет обратно те же данные в JSON. Это гораздо более распространенная практика и имеет дополнительную ценность для отображения этих данных для других ресурсов.

6

Простой способ передать переменные от фляжки до шаблона в javascript-файл с простым примером, упомянутым @mauro.

main.py

@app.route('/') 
def hello(): 
    data = {'username': 'Pang', 'site': 'stackoverflow.com'} 
    return render_template('settings.html', data=data) 

settings.html

<html> 
    <head> 
     <script type="text/javascript"> 
      var username = {{ data.username }} 
      var site = {{ data.site }} 
     </script> 
     <script type="text/javascript" src="app.js"></script> 
    </head> 
</html> 

app.js

function myFunc() { 
    return username + site 
} 
+1

Этот ответ сработал для меня только после того, как я изменил 'data.username' на 'data.username | tojson' (я передаю переменную, чье имя содержит слэши , например, «/ example/name», если это имеет значение.) – Sam

Смежные вопросы