#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