繁体   English   中英

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

[英]How to not only open a HTML file from python CGI script but also pass data like strings and JSON files to HTML script?

一段时间以来,我一直试图弄清楚如何在不使用框架的情况下执行此操作(例如,我可以使用 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","\n\n")
    print ('''
  <head><meta http-equiv="refresh" content="0;URL='http://localhost/results.html'" /></head>    
''')

有关如何进行的任何建议? 任何帮助表示赞赏,谢谢!

您可能已经发现,您当前的技术会重定向到“results.html”,否则会丢弃任何结果。 我不确切知道您的目标是什么,但一种方法是将“results.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/html\n")
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)

祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM