WEB2 - Python

활용 - 반복문을 이용해서 글목록 구현

수업소개

반복문과 파일목록을 가져오는 기능을 활용해서 글목록 기능을 구현하는 방법을 살펴봅니다. 

 

 

강의

 

 

소스코드 

변경사항

index.py

#!/usr/local/bin/python3
print("Content-Type: text/html")
print()
import cgi, os

files = os.listdir('data')
listStr = ''
for item in files:
    listStr = 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))

 

댓글

댓글 본문
작성자
비밀번호
  1. 열공러
    공부하다 문득 궁금한 점이 생겨서 질문드립니다.
    코드가 실행되면서 title, description, name, id가 어떤 순서로 부여되는지 파악하는것이 이해에 도움이 될 것이라 생각하였습니다.
    그래서 스스로 머릿속에서 코드 8번째 줄의
    for item in files:
    listStr = listStr + '<li><a href="index.py?id={name}">{name}</a></li>'.format(name=item)
    과 27번째 줄의 <ol>{listStr}</ol>
    이 부분들에서 item이 data 폴더 내부의 파일명을 돌면서 name이 먼저 부여되고, 그 이후에 index.py?id={name}, <ol>{listStr}</ol> 부분에 의해서 id가 부여되고 그 다음에 id에 맞추어서 description과 title이 부여될 것이다
    라고 판단을 하였는데, 실제로 하나씩 주석처리를 해서 실행해보는 과정에서 8번째 줄의 for문이 없어도 id가 부여된 것을 확인할 수 있었습니다.
    제 느낌상에는 id가 가장 먼저 부여되는 것 같았는데, 왜 이렇게 되는것일까요?
  2. 민턴쟁이
    할 수 있습니다.
    print(variable) 하면 됩니다.

    만약variable가 변수명이면 "" 없이 그냥 print(variable) 하면 됩니다.

    문자를 그냥 출력하려면 ""를 씌워야 하더라구요 print("hello python")
    대화보기
    • 민턴쟁이
      data 폴더안에 data 내용의 값을 한글로 하면 에러가 뜨는데
      상단에
      #!python
      print("content-type: text/html; charset= euc-kr\n")
      print()

      이렇케 입력해도 안되는군요

      data폴더안의 파일은 .py가 아니로 .txt 이어서 그런건지요?
      해결방법은?
    • popsapple
      선생님, 다른 언어에서는 print 안에 들어가 있는 string 안에 직접변수를 넣을 수 있는데, 파이썬에서는 저렇게 주입시킬 수 밖에 없는 건가요?
    • 흐름으로는 이해가 가는데 문법적으로는 완벽히 이해가 안 가네요..ㅠㅠ
    • Seankim
      good
    • Lethesriver
      그렇게 쓰면,
      반복문이 돌면서 listStr 에 값이 계속 추가시키는 게 아니라
      값을 계속 갱신시키게 되면서
      반복문 중 맨 마지막 값만 listStr에 저장되겠죠
      대화보기
      • 또또0330
        물개 박수를 치면서 보고 있습니다.!!!! 신나네요!!
      • gogo0920
        Description을 가져오는 문구에서 error가 발생하는데 혹시 저 code 그대로 description을 window에서 가져왔을때 error가 생기는 분 없으신가요?

        입력: description = open('data/'+pageID, 'r').read()

        11 form = cgi.FieldStorage()
        12 pageId = form.getvalue('id')
        => 13 description = open('data/'+pageID, 'r').read()
        14 print('''<!doctype html>
        15 <html>
        description undefined, builtin open = <built-in function open>, pageID undefined
        NameError: name 'pageID' is not defined
        args = ("name 'pageID' is not defined",)
        with_traceback = <built-in method with_traceback of NameError object>
      • powerwithlove
        ^^
      • SongSong
        안녕하세요~
        아톰 에디터에서 파일 추가하면 알파벳 순서대로 저장이 돼서
        그 순서대로 화면에 표시 되는데
        그 순서를 임의로 변경할 수 있는 방법이 혹시 있을까요 ?
      • goyacommae
        아톰 에디터 관련 질문입니다. html태그 안에 있는 파이썬 언어 색이 별도로 표시되는건 어떤 패키지 기능인가요?
      • 만일 listStr = listStr + 를 하지 않으면 listStr에는 맨 마지막 item이 할당 되어 마지막 한개만 표시됩니다.
        의문이 생기면 바로 직접 테스트해보면 스스로 알게 됩니다.
      • illliilllliillliii
        감사합니다 ~
      • novice
        프로그래밍 처음 배우는 노비스입니다. 강의 잘 듣고 있습니다. 항상 감사합니다.^^
        listStr = listStr + ~~~~
        이게 왜 필요한지 이해를 못하고 있습니다. @.@
        그냥 listStr ='<li><a href="index.py?id={name}</a></li>'.format(name=item)
        이렇게 하면 안되는건가요?
      • egoing
        초기화라고 생각하시면 될 것 같습니다.
        대화보기
        • 굿잡
          내용을 비운 변수를 선언한거 아닌가요?
        • 마샤
          listStr = ''

          작은 따옴표 두 개는 왜 붙이는 거죠?
        버전 관리
        egoing
        현재 버전
        선택 버전
        graphittie 자세히 보기