You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环内嵌JavaScript循环未正确迭代值问题

问题:Python生成HTML内嵌JS循环后按钮均显示最后一个日期值

我有一个日期列表,想要通过Python循环遍历生成对应的按钮元素:

df2 = ['Sat Nov 12 11:57:21 CST 2022',
 'Wed Nov 23 18:13:31 CST 2022',
 'Wed Nov 23 18:13:32 CST 2022',
 'Thu Nov 10 19:07:50 CST 2022',
 'Fri Nov 11 09:54:54 CST 2022',
 'Fri Nov 11 10:18:36 CST 2022',
 'Sat Nov 26 10:50:05 CST 2022',
 'Sat Nov 12 11:57:50 CST 2022']

目前Python循环中的value变量能正常迭代,但内嵌的JavaScript循环生成的按钮始终显示列表的最后一个日期值,按钮可以正常生成但内容不对,我的代码如下:

for count, value in enumerate(df2):
    counts = str(count)
    f.write(''' 
            <html>
               <head> 
                  <meta name="viewport" content="width=device-width, initial-scale=1"> 
               </head> 
               <body> 
                  <div id="myHTMLWrapper"> 
                  '''+value+'''
                  </div>
                  <script>
              var wrapper = document.getElementById("myHTMLWrapper");
              var myHTML = '';
              for (var i = 0; i < '''+counts+'''; i++) {
                myHTML += '<button class="test">'''+value+'''</button>';
              }
              wrapper.innerHTML = myHTML

                  </script>  
               </body>
            </html>
            ''')

问题原因

  1. 代码逻辑错误:Python循环每次都会生成一个完整的HTML文档,且JavaScript循环的次数是当前元素的索引值count,每次拼接按钮时用的都是当前Python循环的value。当循环到列表最后一个元素时,count=7,JS会循环7次,每次都用最后一个日期生成按钮,最终看到的自然都是最后一个日期的按钮。
  2. 完全没必要用JS循环生成按钮,直接通过Python遍历列表生成按钮元素更简单可靠。

解决方案

方案一:直接用Python生成按钮(推荐)

直接通过Python循环日期列表,逐个生成按钮元素,无需内嵌JS循环:

df2 = ['Sat Nov 12 11:57:21 CST 2022',
 'Wed Nov 23 18:13:31 CST 2022',
 'Wed Nov 23 18:13:32 CST 2022',
 'Thu Nov 10 19:07:50 CST 2022',
 'Fri Nov 11 09:54:54 CST 2022',
 'Fri Nov 11 10:18:36 CST 2022',
 'Sat Nov 26 10:50:05 CST 2022',
 'Sat Nov 12 11:57:50 CST 2022']

# 写入HTML头部
f.write('''
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="myHTMLWrapper">
''')

# 遍历日期生成按钮
for date in df2:
    f.write(f'<button class="test">{date}</button>')

# 写入HTML尾部
f.write('''
</div>
</body>
</html>
''')

方案二:通过Python传递日期列表给JS生成按钮(如果一定要用JS)

把Python的日期列表转为JSON格式传递给JS,再由JS遍历生成按钮:

import json

df2 = ['Sat Nov 12 11:57:21 CST 2022',
 'Wed Nov 23 18:13:31 CST 2022',
 'Wed Nov 23 18:13:32 CST 2022',
 'Thu Nov 10 19:07:50 CST 2022',
 'Fri Nov 11 09:54:54 CST 2022',
 'Fri Nov 11 10:18:36 CST 2022',
 'Sat Nov 26 10:50:05 CST 2022',
 'Sat Nov 12 11:57:50 CST 2022']

# 将日期列表转为JSON字符串
dates_json = json.dumps(df2)

f.write(f'''
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="myHTMLWrapper"></div>
<script>
var wrapper = document.getElementById("myHTMLWrapper");
var dates = {dates_json};
var myHTML = '';
for (var i = 0; i < dates.length; i++) {{
    myHTML += '<button class="test">' + dates[i] + '</button>';
}}
wrapper.innerHTML = myHTML;
</script>
</body>
</html>
''')

内容的提问来源于stack exchange,提问作者pdangelo4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:45:47