【发布时间】:2011-08-22 21:15:45
【问题描述】:
我使用 CherryPy 和 Jinja2 构建简单的网页
网络服务器 python 文件:
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>
好的,然后我运行 webserver,我转到 127.0.0.1:8080 并看到预期的结果:
你好帕维尔!
- 模板\index.html
- 模板\list.html
然后我在浏览器中点击刷新,结果如下:
你好帕维尔!
- 模板\index.html
- 模板\list.html
- 模板\index.html
- 模板\list.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
【问题讨论】: