如何不仅从python CGI脚本打开HTML文件,还将字符串和JSON文件等数据传递给HTML脚本?



我一直在尝试弄清楚如何在不使用框架的情况下做到这一点(例如,我可以用 Flask 完成这项工作(,但我还没有找到任何东西。我有两个html脚本和一个python cgi脚本。从本质上讲,我有第一个html文件,其中用户输入一个字符串,我将其读取到我的python cgi脚本中,这反过来又做了很多事情,最终给了我一堆字符串和json文件,我需要传递给另一个html文件,并且能够在那里阅读它们。

到目前为止,前半部分有效,我可以使用重定向打开第二个 html,这并不优雅,但以下代码没有其他

方法:
#!/Users/<username>/opt/anaconda3/bin//python
import pandas as pd
import numpy as np
import cgi
import cgitb
import sys
cgitb.enable()
# Create instance of FieldStorage 
form = cgi.FieldStorage() 
# Get data from fields
protein_name = form.getvalue('protein_name')
####### function search_results takes in protein_name and gives me the data ###
####### I need to pass to the html file: results.html #########################

if ((search_results(protein_name)!="No protein entered")&(search_results(protein_name)!="No results found")):
all_vars = search_results(protein_name)
##### all_vars is a tuple of strings like gene_name, json files and integers
print("Content-type: text/html","nn")
print ('''
<head><meta http-equiv="refresh" content="0;URL='http://localhost/results.html'" /></head>    
''')

关于如何进行的任何建议?任何帮助不胜感激,谢谢!

您可能已经发现,您当前的技术会重定向到"结果.html",但会丢弃任何结果。我不知道你的目标是什么,但一种方法是将"结果.html"视为一个简单的模板。您的脚本将填充它并返回它以响应每个请求。在下面的示例中,"results.html"可以包含任意 HTML,以及行"##RESULTS##",该行将替换为您的输出。

#!/Users/<username>/opt/anaconda3/bin/python
import sys
import pandas as pd
import numpy as np
import cgi
import cgitb
cgitb.enable()
def process_results(results):
if results=='No protein entered' or results=='No results found':
return results
# else do something with results, e.g., format into an HTML table
buf = '<table>n'
for result in results:
buf += f'<tr><td>{cgi.escape(str(result))}</td></tr>n'
buf += '</table>n'
return buf
form = cgi.FieldStorage() 
protein_name = form.getvalue('protein_name')
results = search_results(protein_name)
print("Content-type: text/htmln")
with open('results.html') as template:
for line in (x.rstrip() for x in template):
if line == '##RESULTS##':
print(process_results(results))
else:
print(line)

祝你好运。

最新更新