前提・実現したいこと
2組の画像リストをhtmlで出力したいと考えています。
複数出力するので、テーブル形式で出力したいと考え、下のindex.pyのcreate_tableという関数でhtml形式のテーブルを作り、--table--を書き換えようと思っています。
訳あって、実行環境はオフラインで、そのhtmlはローカルで表示します。
cgiのサーバを立て、htmlのテーブルをpythonで更新してlocalhostで表示しようとしています。
フォルダ構成(見づらくてすいません。)
root
-cgi-bin
--index.py
-cgiserver.py
-res
--test1
---a.png
---b.png
--test2
---a.png
---b.png
問題点
ループでリストを作るとうまくいきませんが、その出力結果をターミナルからコピーしてリストをハードコードするとうまく表示されます。
ループで作ったリスト(table_data1)とハードコードされたリスト(table_data2)に違いがないかも確認しましたが、Trueと返ってきました。
お手数ですが、間違っている点を指摘いただければ幸いです。
よろしくお願いいたします。
該当のソースコード
cgiserver.py
python
1import http.server 2import subprocess 3 4http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler) 5subprocess.call('python -m http.server --cgi')
index.py
import glob import pathlib print('Content-type: text/html; charset=UTF-8\r\n') html = """ <!DOCTYPE html> <html> <meta charset="utf-8"> <head> <title>Images List</title> </head> <body> <h1>aaa</h1> <h2>Images</h2> --table-- </body> </html> """ def create_table(table_data): rows = '' for case in table_data: columns = '' for cell in case: columns += "\t\t\t\t<td><img src='{}'></td>\n".format(cell) rows += "\t\t\t<tr>\n{}\t\t\t</tr>\n".format(columns) table = "<table>\n{}\n\t\t</table>".format(rows) return table test1_dir = '../res/test1/' test2_dir = '../res/test2/' test1_images = sorted([pathlib.Path(f).name for f in glob.glob(test1_dir + '*.png')]) test2_images = sorted([pathlib.Path(f).name for f in glob.glob(test2_dir + '*.png')]) #test1にもtest2にもあるファイルだけ抽出する。 to_be_listed = set(test1_images) | set(test2_images) table_data1 = [[test1_dir + case_name, test2_dir + case_name] for case_name in to_be_listed] table_data2 = [['../res/test1/a.png', '../res/test2/a.png'], ['../res/test1/b.png', '../res/test2/b.png']] table_html = create_table(table_data1) html = html.replace('--table--', table_html) # display the html print(html)
回答2件
あなたの回答
tips
プレビュー