#!/usr/local/bin/python3
print("Content-Type: text/html")
print()
import cgi
form = cgi.FieldStorage()
if "id" in form:
pageId = form["id"].value
description = open('data/'+pageId, 'r').read()
else:
pageId = "welcome"
description = "Hello, web"
print('''<!doctype html>
<html>
<head>
<title>WEB1 - Welcome</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="index.py">WEB</a></h1>
<ol>
<li><a href="index.py?id=HTML">HTML</a></li>
<li><a href="index.py?id=CSS">CSS</a></li>
<li><a href="index.py?id=JavaScript">Javascript</a></li>
<li><a href="index.py?id=Python">Python</a></li>
</ol>
<h2>{title}</h2>
<p>{desc}</p>
</body>
</html>
'''.format(title = pageId, desc = description))
위의 웹 애플리케이션은
data 디렉토리에 있는 파일을 통해 글의 본문을 제어할 수 있는 반면,
표시된 부분의 글 제목 목록들은 제어할 수 없다.
for 반복문과 파일 제어를 활용해서
글 제목 목록을 관리할 수 있도록 구현해보자.
구현 방법)
data 디렉토리에 있는 파일들의 목록을 불러와서
글 제목 목록을 보여주고 있는 li 태그 부분과 연동되도록 만들자
1) python3 file list in directory 등으로 검색하면
아래와 같이 파일 목록을 불러올 수 있는 코드를 확인할 수 있다.
os.listdir(path)
2) os.listdir(path) 코드를 적용시켜주자.
import cgi, os files = os.listdir('data')
3) for 반복문을 활용하면 아래와 같이 목록을 만들고 이를 리스트에 추가할 수 있다.
listStr = " " for item in files: listStr += '<li><a href="index.py?id={name}">{name}</a></li>'.format(name = item)
(data 디렉토리의 파일들이 있는) files 에서 파일을 하나씩 가져와
해당 파일의 파일명과 같은 이름의 목록을 만든다.
포매팅을 사용해 파일명을 name 이라는 변수에 두고
name 변수를 id값과 목록명의 위치에 치환한다.
이렇게 id값, 파일명과 같은 이름으로 목록명이 만들어질 때 마다
listStr 이라는 (변수명을 가진) 리스트에 추가한다.
files에서 data 디렉토리에 있는 파일을 모두 가져올 때 까지
위 과정을 반복한다.
4) listStr 이라는 리스트 변수를
웹 페이지 내 글 제목 목록을 보여주던 li태그 부분과 포매팅 코드에 치환시키자.
<ol>{listStr}</ol> <h2>{title}</h2> <p>{desc}</p> </body> </html> '''.format(title= pageId, desc= description, listStr= listStr))
5) 최종 코드는 아래와 같다.
#!/usr/local/bin/python3
print("Content-Type: text/html")
print()
import cgi, os
files = os.listdir('data')
listStr = " "
for item in files:
listStr += '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
form = cgi.FieldStorage()
if 'id' in form:
pageId = form["id"].value
description = open('data/'+pageId, 'r').read()
else:
pageId = 'Welcome'
description = 'Hello, web'
print('''<!doctype html>
<html>
<head>
<title>WEB1 - Welcome</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="index.py">WEB</a></h1>
<ol>{listStr}</ol>
<h2>{title}</h2>
<p>{desc}</p>
</body>
</html>
'''.format(title = pageId, desc = description, listStr = listStr))
이제 data 디렉토리에 파일이 생성, 삭제되거나
보관중인 파일명이 수정되면
글 제목 목록도 함께 생성, 삭제 또는 수정된다.
[출처] 생활코딩 WEB2 - Python
https://opentutorials.org/module/3357