HTML выберите параметры из списка python

#python #html #cgi

#python #HTML #cgi

Вопрос:

Я пишу cgi-скрипт на Python для настройки кластера Hadoop. Я хочу создать выпадающий список выбора HTML, в котором параметры берутся из списка Python. Возможно ли это?? Я много искал вокруг. Не удалось найти правильного ответа на этот вопрос.

Это то, что я нашел до сих пор в другом потоке…

 def makeSelect(name,values):
    SEL = '<select name="{0}">n{1}</select>n'
    OPT = '<option value="{0}">{0}</option>n'
    return SEL.format(name, ''.join(OPT.format(v) for v in values))
  

Мне действительно нужна помощь. Пожалуйста. Спасибо.

Ответ №1:

Вам нужно сгенерировать список «опций» и передать их в свой javascript, чтобы составить список

 values = {"A": "One", "B": "Two", "C": "Three"}
options = []

for value in sorted(values.keys()):
    options.append("<option value='"   value   "'>"   values[value]   "</option>")
  

Затем введите «параметры» в ваш HTML-код. Скажем, в вашем «template.html » есть линия:

 var options = $python_list;
  

Затем в конце вашего скрипта на python:

 ####open the html template file, read it into 'content'
html_file = "template.html"
f = open(html_file, 'r')
content = f.read()
f.close()

####replace the place holder with your python-generated list
content = content.replace("$python_list", json.dumps(options))

####write content into the final html
output_html_file = "index.html"
f = open(output_html_file, 'w')
f.write(temp_content)
f.close()
  

В вашем «index.html «, у вас должна быть одна строка после «var options = …», которая принимает список и генерирует выпадающий список.

 $('#my_dropdown').append(options.join("")).selectmenu();
  

В качестве альтернативы, я предлагаю вам использовать ваш python для создания файла json (с json.dumps()), возможно, файла под названием «config.json». И ваш html-файл javascript должен прочитать этот json-файл, чтобы отобразить конечную страницу. Итак, в вашем файле json должно быть что-то вроде:

{ … «варианты»: [«Один», «Два», «Три»] …}

И в вашем разделе html <script> вы могли бы прочитать значения параметров

 d3.json("config.json", function(data)) {
 var options = [];
 for (var i= 0; i < data.options.length; i  )
    {
      options.push("<option value='"   data.options[i]   "'>"   data.options[i]   "</option>");

    }
 $('#my_dropdown').append(options.join("")).selectmenu();
}
  

Комментарии:

1. Вау. Ок . Мне потребуется некоторое время, чтобы понять все это. Я понятия не имею, как работает json, поэтому я не думаю, что это приемлемый вариант для меня. Но большое вам спасибо.

2. Ммм, почему значения берутся как словарь?

3. Я не уверен, как это должно работать. Потому что пока у меня есть только один скрипт .cgi, в котором есть весь мой html-код, а также требуемый код python. Итак, я не понимаю, почему вы открываете файл, а затем переносите вывод в другой. Извините. Я новичок в Python.

4. Какой тип взаимодействия у вас есть с вашим cgi-кодом? У cgi-скрипта должен где-то быть свой html-код, либо жестко закодированный сам по себе, либо он берет где-то шаблон, изменяет его и возвращает. В любом случае, вам нужно получить доступ к этой html-части и адаптировать ее так, чтобы ваш код Python мог передавать параметры.

5. CGI-код, а также HTML-код находятся в одном файле. Я использую print «»» html «»»» для печати html-разделов.

Ответ №2:

Возможно, это самый простой способ сделать это. Просто обновите свои параметры с помощью цикла FOR, используя Python в HTML…eg:

Вот список выбора, который я заполняю массивом с именем myOptions, который я передал в форму. Я также добавил оператор If, который проверяет, является ли одно из значений в списке = to myValue, и предварительно выбрал это значение. Это совершенно необязательно.

  <select>
        {% for opt in myOptions %}
            <option value={{ opt }} 
               {% if myValue==opt %} 
                   selected="true"
               {% endif %}>{{ opt }}
            </option>
        {% endfor %}
 </select>
  

Ответ №3:

Это более простой способ сделать это.

 import cgitb
cgitb.enable()

import cgi
form = cgi.FieldStorage()
lister = ['a','b','c']

html_list = ''
for value in lister:
   html_list  = '<option value={0}>{0}</option>'.format(value)

html = """Content-type: text/htmln

<html>
<head>
</head>
<body>
<select>
   {}
</select>
</body>
</html>
""".format(html_list)
print(html)
  

Более подробная информация здесь:http://python-forum.io/Thread-string-format-and-string-expressions