時間我建立使用CherryPy的和Jinja2的For循環 '打印' 每次我打刷新
簡單的網頁的Web服務器的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