将Python变量链接到HTML脚本
我写了一个Python 3.2的脚本,从一个SQLite 3数据库中提取了18个问题,然后随机选择了10个。这个脚本运行得很好,但我现在想用HTML来展示这些问题。我知道怎么在HTML里做问题框,但不知道怎么把实际的问题内容放到“问题1”的位置上。
下面是HTML代码:
def PrintGame():
print( """
<html>
<div id = "textbody">
<h2>Quiz</h2>
<form method="post" action="quiz.cgi">
<table border="0">
<tr>
<td>Question 1:</td>
<td><input type="text" name="A1"/></td>
</tr>
<tr>
<td>Question 2:</td>
<td><input type="text" name="A2"/></td>
</tr>
<tr>
<td>Question 3:</td>
<td><input type="text" name="A3"/></td>
</tr>
<tr>
<td>Question 4:</td>
<td><input type="text" name="A4"/></td>
</tr>
<tr>
<td>Question 5:</td>
<td><input type="text" name="A5"/></td>
</tr>
<tr>
<td>Question 6:</td>
<td><input type="text" name="A6"/></td>
</tr>
<tr>
<td>Question 7:</td>
<td><input type="text" name="A7"/></td>
</tr>
<tr>
<td>Question 8:</td>
<td><input type="text" name="A8"/></td>
</tr>
<tr>
<td>Question 9:</td>
<td><input type="text" name="A9"/></td>
</tr>
<tr>
<td>Question 10:</td>
<td><input type="text" name="A10"/></td>
</tr>
<tr>
<td><input type="submit" value="Submit Answers"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
""")
为了更清楚,我想把“问题n”这种占位符替换成从SQLite 3数据库中提取的问题。这些问题被加载到QASKEDN变量中(N是问题的编号)。
2 个回答
0
你可以看看 Jinja,这是一个用于Python的模板语言。
在你的情况下,你的Jinja模板应该像下面这样:
template_string = """
<html>
...
{% for question, name in questions %}
<tr>
<td>{{question}}</td>
<td><input type="text" name="{{name}}"/></td>
</tr>
{% endfor %}
...
</html>
"""
然后你从代码中加载这个模板字符串,并调用渲染函数,把你的数据传进去(在这个例子中是一个包含问题和名字的元组列表)。
question_list = [("Q1", "name1"), ("Q2", "name2"), ...]
template = Template(template_string)
template.render(questions=questions_list)
0
听起来你只是想要字符串格式化,但需要一个灵活的格式字符串或变量。
我还没确认,但可能可以这样做?
def PrintGame():
htmlquestions = []
for question in QASKEDN:
htmlquestions.append("""
<tr>
<td>{} :</td>
<td><input type="text" name="A1"/></td>
</tr>""".format(question))
html = ("""
<html>
<div id = "textbody">
<h2>Quiz</h2>
<form method="post" action="quiz.cgi">
<table border="0">"""
+ "".join(htmlquestions) +
""" </table>
</form>
</div>
</body>
</html>
""")
更新:最后几行现在加上了三个双引号的开头。