将Python变量链接到HTML脚本

0 投票
2 回答
1093 浏览
提问于 2025-04-17 19:51

我写了一个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>
    """)

更新:最后几行现在加上了三个双引号的开头。

撰写回答