2011-08-22 7 views
0

를 새로 칠 때마다 '인쇄'되는 웹 서버 파이썬 파일 :내가 CherryPy와 Jinja2</p> <p>를 사용하여 간단한 웹 페이지를 구축 내가

import cherrypy 
from jinja2 import Environment, FileSystemLoader 
from soltyslib import listFiles 
env = Environment(loader=FileSystemLoader('templates')) 
class HelloWorld(object): 
    @cherrypy.expose   
    def index(self):   
     template = env.get_template('index.html') 
     result = template.render(name='Pawel',files=listFiles('templates')) 
     return result  

cherrypy.quickstart(HelloWorld()) 

템플릿 파일 :

Hello {{name}}! 
<ul> 
{% for file in files %} 
    <li>{{file}}</li> 
{% endfor %} 
</ul> 

좋아, 웹 서버를 실행하면 127.0.0.1:8080으로 이동하여 예상 결과를 확인합니다.

안녕하세요 파블!

안녕하세요 파블 :

  • 템플릿은
  • 템플릿 \ list.html

을 index.html을하지만 내가 브라우저에서 새로 고침 명중하고이 결과입니다 \!

  • 템플릿은
  • 템플릿 \ \ list.html
  • 템플릿
  • 템플릿 \ list.html

왜 index.html을 index.html을 \? for 루프가 다시 계산됩니까? 그렇게하는 것을 방지하는 방법?

그리고 경우에

누군가가 때 listFiles 기능이 어떻게 보이는지 궁금 :

import os,sys 
from collections import deque 
def listFiles(cdir, fileslist=[]): 
    basedir = cdir 
    queuedir = deque() 
    queuedir.append(basedir) 
    while len(queuedir) > 0: 
     currentbase = queuedir.popleft() 
     for f in os.listdir(currentbase): 
      f = os.path.join(currentbase,f) 
      if os.path.isdir(f):   
       queuedir.append(f) 
      else: 
       fileslist.append(f) 

    return fileslist 

답변

4

귀하의 문제는

def listFiles(cdir, fileslist=[]): 

당신은 모든 호출에 동일한 목록을 다시 사용하고 있습니다. 이 문제가 발생하면 긴 토론을 위해 "Least Astonishment" and the Mutable Default Argument을 참조하십시오.

그것은 listFiles에서 fileslist에 대한 기본 kwarg의

def listFiles(cdir, fileslist=None): 
    if fileslist is None: 
     fileslist = [] 
0

귀하의 문제는 함수 선언에 fileslist=[]입니다. 기본값은 한 번만 평가됩니다. 즉, 목록이 처음 호출되지만 다시 작성되거나 지워지지는 않습니다. 기본 인수는 함수가,이 호출 할 때마다 정의되지 않았습니다 경우에만 평가되기 때문에

0

마십시오. 이 목록은 모듈로드 시간에 한 번 생성되며 추가 할 때마다 항목이 누적됩니다.

관련 문제