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. Leo Kim
    두번 돌려보니까 이해가 되네요! 고지까지 올라왔다니 신나네요
  2. Inyeong Gim
    영화보다가 클라이막스에 다다른 기분! 신나네요
  3. 열공러
    공부하다 문득 궁금한 점이 생겨서 질문드립니다.
    코드가 실행되면서 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가 가장 먼저 부여되는 것 같았는데, 왜 이렇게 되는것일까요?
  4. 민턴쟁이
    할 수 있습니다.
    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 자세히 보기