呼び出し側のページに複数のボタンがあるとき、どのボタンが押されたのかを判断するコード例を紹介します。
このコードは実際にサーバーに設置しているものです。
こちらのページでさくらのレンタルサーバーでの動作を実際に見ることができます。
文法的な解説はこちらのページで行っています。
呼び出し側HTML
<html>
<head>
<meta charset=utf-8>
<title>Sample</title>
</head>
<body>
<form action=/it/python/btn/cast.cgi method=post>
<p><textarea id="copyTarget" cols="20" name="text" rows="10" wrap="off">Hello World
Hello World
Hello World</textarea></p>
<p><button name="button" value="kon">こんにちは</button> <button name="button" value="seka">世界</button></p>
</form>
</body>
</html>
cgiのコード
#!/usr/local/bin/python
#coding: utf-8
import cgi,sys,io
form = cgi.FieldStorage()
text = form.getvalue('text', '') #複数行テキストボックス(textarea)の値
button = form.getvalue('button', '') #ボタンの値
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
#ボタンが2つの場合
if button == "kon": #if文の最後の:を忘れないこと
aisatsu="こんにちは" #ブロック内はスペース4個インデントする ブロック内に空白行を入れない
sekai = "World"
else: #elseの後の:を忘れないこと
aisatsu="Hello"
sekai = "世界"
#ボタンが3つ以上ある場合
if button == "kon":
aisatsu="こんにちは"
sekai = "World"
elif button == "seka":
aisatsu="Hello"
sekai = "世界"
elif button == "gdgd":
aisatsu="Hel"
sekai = "地獄"
print('Content-Type: text/html; charset=UTF-8\n')
print("実行結果<BR>")
stringlist = text.split("\n") #複数行テキストボックスの内容を行ごとに配列化(改行記号で区分けする)
print("stringlist = ")
print(stringlist)
print("<BR>")
index=[] #配列の宣言
i = 0
for line in stringlist: #stringlistの要素数だけforループ lineには都度stringlistの各要素の文字列が入る
if line[0:5]=="Hello" and i > 0: #最初の5文字で判定
line=line.replace("Hello",aisatsu) #.replace で置換された文字列を与える 代入文にしないとlineの値は変化しないので注意
index.append(line) #.append で配列要素を追加する
i = i + 1
print("index = ")
print(index)
print("<BR>")
array=[]
for i in range(len(index)): #indexの要素数だけforループ 今何行目か知る必要があるときに使う range(len()) で0から最後までという意味
str = index[i]
if "World" in str and i > 0: #その文字が含まれているかを in で判定する
str = str.replace("World",sekai) #6文字目までを削除
if i != 2: # != は not == にしても同じ
array.append(str)
print("array = ")
print(array)
print("<BR>")
#ここより上のprint()は、本番ではコメントアウトする(頭に#を付ける)
#要所要所にprint()を入れておくとエラーの発生カ所を特定しやすい
#出力するHTML
html_body1 = """
<!DOCTYPE html>
<html><meta charset="UTF-8" >
<head>
<title>python cgi sample</title>
</head><body><P><H3>実行結果</H3></P><p><textarea id="copyTarget" wrap="off" rows="8" cols="20">"""
html_body2 = """
</textarea></p>
<!-- コピー対象要素とコピーボタン -->
<button onclick="copyToClipboard()">コピー</button>
<script>
function copyToClipboard() {
// コピー対象をJavaScript上で変数として定義する
var copyTarget = document.getElementById("copyTarget");
// コピー対象のテキストを選択する
copyTarget.select();
// 選択しているテキストをクリップボードにコピーする
document.execCommand("コピー");
}
</script>
</body>
</html>
"""
print(html_body1)
for line in array:
print(line)
print(html_body2)