呼び出し側のページのチェックボックスの状態を判断するコード例を紹介します。
このコードは実際にサーバーに設置しているものです。
こちらのページでさくらのレンタルサーバーでの動作を実際に見ることができます。
文法的な解説はこちらのページで行っています。
呼び出し側HTML
<html>
<head>
<meta charset=utf-8>
<title>Sample</title>
</head>
<body>
<form action=/it/python/txt/cast.cgi method=post>
<p><textarea id="copyTarget" cols="44" name="text" rows="10" wrap="off">Hello World
Hello World
Hello World</textarea></p>
<p><input id="hello" name="hello" checked="checked" type="checkbox" value="hello" /><label for="hello"こんにちは</label></p>
<p><input id="world" name="world" type="checkbox" value="world" /><label for="world">世界</label></p>
<p><button name="button" value="kon">送信</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', '') #ボタンの値
hello = form.getfirst('hello', '') #チェックボックスの状態をboolean型で取得
world = form.getfirst('world', '') #チェックされていれば真
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
aisatsu = "Hello"
if hello:
aisatsu = "こんにちは"
if world:
sekai ="世界"
else:
sekai ="World"
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 #i の加算は自分で行う
print("index = ")
print(index)
print("<BR>")
array=[]
for i in range(len(index)): #indexの要素数だけforループ i は自動で加算される 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="10" cols="22">"""
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)