是否可以在 HTML 上嵌入 运行 Python 代码?
Is it possible to embed and run Python code on HTML?
我正在尝试 运行 一个嵌入了 HTML 代码的 Python 脚本,但它不起作用。我想执行一个 Python 脚本,同时渲染将由脚本打印的 HTML。
app.py
:
#!/usr/bin/python2.6
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/briefing')
def briefing():
return render_template('briefing.html')
@app.route('/briefing/code')
def app_code():
return render_template('app_code.py')
if __name__ == '__main__':
app.run(debug=True)
app_code.py
:
http://i.stack.imgur.com/sIFFJ.png
当我访问 http://127.0.0.1:5000/briefing/code
时,结果是 http://i.stack.imgur.com/iEKv2.png。
我知道正在发生的事情是我正在渲染为 HTML,因此文件中的 Python 代码没有被解释。
如何 运行 app_code.py
并同时从中渲染 HTML?
你混淆了很多东西,我看到问题的第一个 post 花了我一段时间才弄清楚你想做什么。
你似乎需要掌握的想法是,你需要先在Python中准备模型(例如字符串,对象,一个带有你想要的数据的字典等),然后将它注入到要渲染的 模板 中(而不是打印出你想在 HTML 输出中看到的内容)
如果您想将 subprocess.call
的输出显示到 HTML 页面中,您应该这样做:
- Get the output from subprocess in a string format
- 创建一个 HTML 模板以在
中显示
- 让 Flask 调用子进程,呈现模板和return HTTP 响应
app.py
:
#!/usr/bin/python2.6
import subprocess
from flask import Flask, render_template
app = Flask(__name__)
def get_data():
"""
Return a string that is the output from subprocess
"""
# There is a link above on how to do this, but here's my attempt
# I think this will work for your Python 2.6
p = subprocess.Popen(["tree", "/your/path"], stdout=subprocess.PIPE)
out, err = p.communicate()
return out
@app.route('/')
def index():
return render_template('subprocess.html', subprocess_output=get_data())
if __name__ == '__main__':
app.run(debug=True)
subprocess.html
:
<html>
<head>
<title>Subprocess result</title>
</head>
<body>
<h1>Subprocess Result</h1>
{{ subprocess_output }}
</body>
</html>
在上面的模板中,{{ subprocess_output }}
将替换为您从 Flask 视图传递的值,然后将生成的 HTML 页面发送到浏览器。
如何传递多个值
您可以render_template('page.html', value_1='something 1', value_2='something 2')
并在模板中:{{ value_1 }}
和 {{ value_2}}
或者你可以传递一个叫做例如result
:
render_template('page.html, result={'value_1': 'something 1', 'value_2': 'something 2'})
并在模板中 {{ result.value_1 }}
和 {{ result.value_2 }}
我正在尝试 运行 一个嵌入了 HTML 代码的 Python 脚本,但它不起作用。我想执行一个 Python 脚本,同时渲染将由脚本打印的 HTML。
app.py
:
#!/usr/bin/python2.6
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/briefing')
def briefing():
return render_template('briefing.html')
@app.route('/briefing/code')
def app_code():
return render_template('app_code.py')
if __name__ == '__main__':
app.run(debug=True)
app_code.py
:
http://i.stack.imgur.com/sIFFJ.png
当我访问 http://127.0.0.1:5000/briefing/code
时,结果是 http://i.stack.imgur.com/iEKv2.png。
我知道正在发生的事情是我正在渲染为 HTML,因此文件中的 Python 代码没有被解释。
如何 运行 app_code.py
并同时从中渲染 HTML?
你混淆了很多东西,我看到问题的第一个 post 花了我一段时间才弄清楚你想做什么。
你似乎需要掌握的想法是,你需要先在Python中准备模型(例如字符串,对象,一个带有你想要的数据的字典等),然后将它注入到要渲染的 模板 中(而不是打印出你想在 HTML 输出中看到的内容)
如果您想将 subprocess.call
的输出显示到 HTML 页面中,您应该这样做:
- Get the output from subprocess in a string format
- 创建一个 HTML 模板以在 中显示
- 让 Flask 调用子进程,呈现模板和return HTTP 响应
app.py
:
#!/usr/bin/python2.6
import subprocess
from flask import Flask, render_template
app = Flask(__name__)
def get_data():
"""
Return a string that is the output from subprocess
"""
# There is a link above on how to do this, but here's my attempt
# I think this will work for your Python 2.6
p = subprocess.Popen(["tree", "/your/path"], stdout=subprocess.PIPE)
out, err = p.communicate()
return out
@app.route('/')
def index():
return render_template('subprocess.html', subprocess_output=get_data())
if __name__ == '__main__':
app.run(debug=True)
subprocess.html
:
<html>
<head>
<title>Subprocess result</title>
</head>
<body>
<h1>Subprocess Result</h1>
{{ subprocess_output }}
</body>
</html>
在上面的模板中,{{ subprocess_output }}
将替换为您从 Flask 视图传递的值,然后将生成的 HTML 页面发送到浏览器。
如何传递多个值
您可以render_template('page.html', value_1='something 1', value_2='something 2')
并在模板中:{{ value_1 }}
和 {{ value_2}}
或者你可以传递一个叫做例如result
:
render_template('page.html, result={'value_1': 'something 1', 'value_2': 'something 2'})
并在模板中 {{ result.value_1 }}
和 {{ result.value_2 }}