Как не только открыть файл HTML из python CGI-скрипта, но и передать данные, такие как строки и JSON файлы, в HTML скрипт? - PullRequest
0 голосов
/ 06 февраля 2020

Я пытался выяснить, как сделать это некоторое время без использования фреймворка (например, я могу сделать это с помощью 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>    
''')

Есть предложения о том, как действовать? Любая помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 15 февраля 2020

Как вы, вероятно, обнаружили, ваша текущая техника вызывает перенаправление на «результаты. 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/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)

Удачи .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...