【问题标题】:Passing list of values one by one from python script to html page将值列表从python脚本一一传递到html页面
【发布时间】:2018-10-13 07:54:09
【问题描述】:

我需要将一个包含五个值的列表从 python 脚本传递到 html 页面。我运行了一个循环并将值一个接一个地传递给 html 页面。但它只打印浏览器中的最后一个值。我的 html 代码是格式:

<html>
<head></head>
<body>
<p>{{value}}</p>
</body>
</html>

实际上,我正在使用决策树使用 predict_proba(a) 计算每个类标签的概率。我取出具有最大概率的索引并使用该索引取出前五个类标签。我想将这些顶部标签呈现给我的html页面。我的python脚本如下:

这里的变量“a”是输入的集合,变量“事件”包含所有不同的类标签。

DTC= DecisionTreeClassifier()
DTC.fit(X_train,y_train)
DTC.predict(pandas.DataFrame([a]))
res=DTC.predict_proba([a])
new=list(chain.from_iterable(res))
index=sorted(range(len(new)), key=lambda i: new[i], reverse=True)[
value=[]
for i in index:
        value.append(event[i])
        return render_template('output.html',value=value)

【问题讨论】:

  • 请用脚本文件更新您的问题。
  • 还添加您的预期输出。您希望如何显示所有五个值?

标签: python


【解决方案1】:

您好,我认为您需要做的是将列表元素连接到一个字符串。

我假设你有一个如下列表:

xlist = ["mangoes","grapes","apples","oranges"]

执行以下操作将为您提供一个包含空格分隔的列表元素的字符串:

xstr = ' '.join(xlist)
print(xstr)

mangoes grapes apples oranges

如果您希望它们分别位于单独的 p 标签内,您可以尝试以下操作:

xstr = ""
for e in xlist:
    xstr+='<p>'+e+'</p>'
print(xstr)

&lt;p&gt;mangoes&lt;/p&gt;&lt;p&gt;grapes&lt;/p&gt;&lt;p&gt;apples&lt;/p&gt;&lt;p&gt;oranges&lt;/p&gt;

现在您可以将字符串传递给 html。希望这能解决您的问题。

 This is the modified code .I need to print the output in browser in tabular format.
    def getLabel(i):

               db = MySQLdb.connect("localhost","root","","cpi" )
               cursor=db.cursor()
               cursor.execute('''select meaning from code where 
               code ='%d' ''' % (i))
               data=cursor.fetchall()
               return data
      xstr1 = ""
      for i in index:
            xstr1 +=str(getLabel(event[i]))+" "


      return render_template('output.html',value=xstr1) 


This is output.html
<html>
<head>
</head>

    <body>
        <table>

            {{value}}
        </table>
    </body>


</html>

【讨论】:

  • 我也附上了我的python脚本,请查看并提出建议。
  • @BishakhaKumari 我相信每次调用 render_template() 时都会使用给定的值呈现整个页面。因此,通过在循环中调用它,您将一次又一次地呈现整个页面。您必须将 render_template 函数调用移到 for 循环之外。此外,您正在将一个列表传递到 p 标签内的 be print 中,我认为这不是您想要的。请尝试我的解决方案,看看它是否满足您的需求。
  • 谢谢,它有效,但如果我想在浏览器中以表格格式打印所有值,我无法做到这一点。它是在一行中打印。请提出建议。
  • @BishakhaKumari 您可以通过添加
    标签使它们出现在下一行。 xstr += '&lt;p&gt;' + e + '&lt;/p&gt; &lt;br/&gt;'。或者,如果您希望它完全是表格,您可以用 标记替换 p 标记,并将变量包含在 html 文件中的 标记内。如果您想要完整的代码解决方案,请分享您希望它的外观以及列表中的示例值。
  • 假设在应用上述解决方案后,存储在 xstr 中的值是:xstr= 25 33 40 53 52。每个值都存在一些有意义的字符串,我需要从数据库 MySQL 中获取它,然后呈现该含义与html页面的每个值相关联。让我们假设:25-蓝鲸,33-海水,..等等。即我需要通过python脚本以表格格式打印从数据库获取到浏览器的每个值的含义。我正在使用flask框架
【解决方案2】:

根据 cmets 中的讨论修改答案:

我假设这里的这些数字就像一个 id 并且每个都有一个对应的唯一值(含义)。在这种情况下,您可以按如下方式对其进行修改:

xstr = ""
for id in xlist:
    xstr+='<tr><td>' + id + ' </td><td>' + getLabel(id) + '</td></tr>'

现在您应该定义 getLabel() 以便它接受 id 作为参数并从您的数据库中获取相应的标签并返回它。

你的 html 文件应该是这样的:

<body>
    <table>
        <tr>
            <th>Id</th>
            <th>Name</th>
        </tr>
        {{value}}<!--This will be a set of table rows -->
    </table>
</body>

【讨论】:

  • def getLabel(i): db =MySQLdb.connect("localhost","root","","contextual_intelligence_provider" ) cursor=db.cursor() cursor.execute(''' 选择含义来自列表 where code='i' ''') data=cursor.fetchall() return data xstr = "" for id in index: xstr+=' ' + str(event[id]) + ' ' + getLabel(str(event[id])) + ' ' print(xstr) return render_template('output.html',value=xstr) 还是我我得到 TypeError: must be str, not tuple
  • @BishakhaKumari 嗨,我相信变量 data 是一个元组(有点像列表),因为它存储 sql 查询的输出(因为它可能有不止一行)。尝试打印出来data[0] 并相应地修改 return 语句以返回标签。请务必提交格式化代码,这有点乱。此外,此问题完全超出您最初问题的范围,建议将此类问题作为新问题发布。因此,如果它解决了您最初的问题,请将答案标记为解决方案。如果您仍需要帮助,请再次在 cmets 中告诉我 data[0] 打印的内容。
  • @BishakhaKumari 请参考:stackoverflow.com/questions/12867140/…
  • 我收到 IndexError: tuple index out of range。每个类标签只包含一个特定的含义。
  • 好的,然后尝试打印 data 而不是 data[0] 并告诉我它输出的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 2016-12-30
  • 2013-04-13
相关资源
最近更新 更多