gpt4 book ai didi

python - Genshi for 循环不起作用...?

转载 作者:行者123 更新时间:2023-11-30 23:19:31 24 4
gpt4 key购买 nike

我在使用 Genshi py:for 属性时遇到问题。我做错了什么?下面写出代码;要运行,请使用 Python 2 创建一个 virtualenv,执行 pip install genshi Flask,复制独立目录中列出的文件,然后运行 ​​python hello.py

代码

hello.py的内容:

import os.path
import traceback

import flask
import genshi.template


app = flask.Flask(__name__)
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
loader = genshi.template.TemplateLoader(template_dir, auto_reload=True)


MESSAGES = [
"Hello",
"World",
"Sup?",
]


@app.route("/", defaults={"name": ""})
@app.route("/<path:name>")
def show(name):
template_name = name + ".html"
try:
template = loader.load(template_name)
stream = template.generate(
messages=MESSAGES,
)
rendered = stream.render('html', doctype='html')
except Exception as e:
tb = traceback.format_exc()
return "Cannot load /{}: {} <pre>\n{}</pre>".format(name, e, tb)

return rendered


if __name__ == '__main__':
app.run()

templates/debug.html 的内容:

<!DOCTYPE html>
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://geshi.edgewall.org/"
>
<body>
<p>Messages is a ${str(type(messages))} of length ${len(messages)}</p>

<p>Messages:</p>
<pre>
${'\n'.join(m + "!" for m in messages)}
</pre>
</body>
</html>

templates/hello.html 的内容:

<!DOCTYPE html>
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:py="http://geshi.edgewall.org/"
>
<body>
<h1>Messages</h1>

<ul>
<li py:for="msg in messages">
$msg
</li>
</ul>
</body>
</html>

问题

当我访问 http://localhost:5000/debug 时,一切似乎都按预期工作,但是当我运行 http://localhost:5000/hello 时,我获取“无法渲染/hello:'msg' 未定义”

最佳答案

您的命名空间定义中缺少“n”。目前读的是'xmlns:py="http://geshi.edgewall.org/"' 但它应该显示为 'xmlns:py="http://genshi.edgewall.org/"'。这会导致 Genshi 无法识别“py:for”属性,然后愉快地尝试评估“$msg”,而不使用任何“for msg in messages”来定义变量。

关于python - Genshi for 循环不起作用...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26023950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com