2013-03-21 69 views
0

我从来没有在这里写过任何问题,所以如果我不完全清楚自己在做什么,请和我一起露面。将python变量链接到HTML脚本

我写了一个Python 3.2脚本,从18列表中选择10个随机问题,从SQLite 3数据库中提取它们。该脚本工作正常,但我现在想要使用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被问题编号替代)。

回答

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> 
    """) 

更新:现在开放三双引号的最后几行。

+0

试了一下,看起来并不像它会工作 - 它弄乱其他的事情格式化,把它们变成字符串,我看不出这是为什么 – Lukeno94 2013-03-24 16:29:55

+0

什么其他的事情?最后,所有的HTML都将是一个大字符串,所以一切都会变成字符串。 – Evert 2013-03-25 11:31:40

+0

由于某种原因(处理表单的子例程),它将它下面的子例程转换为字符串格式。 – Lukeno94 2013-03-25 12:16:17

0

您可能想要查看Jinja - python的模板语言。

在你的情况你神社的模板应该是这个样子

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

Jinja看起来很有用,我会试一试 – Lukeno94 2013-03-24 16:30:26

+0

无法完成安装例程,它无法告诉我没有命令已通过... – Lukeno94 2013-03-24 16:44:33