使用 Embedded python 和 SimpleTemplate Engine 作为字符串传递给 template()
Use Embedded python with SimpleTemplate Engine passed as string to template()
我正在调试应用程序并想使用瓶子 SimpleTemplate 来呈现 HTML 和 Python。如果我将模板用作单独的文件 (views/simple.tpl),则 Python 会正确呈现。
如果我尝试将 Python 作为字符串传递,我会得到 NameError("name 'demo' is not defined",)
from bottle import template
text = "debugging"
return template(
"<p>{{text}}</p>" +
"% demo = 'hello world'" +
"<p>{{demo}}</p>",
text=text
)
这可能吗?
嵌入 Python 代码的行必须以 %
开头。问题是您使用的是字符串连接,它不保留换行符。简单地说,该字符串相当于以下行:
<p>{{text}}</p>% demo = 'hello world'<p>{{demo}}</p>
因为 %
不是第一个字符,所以它对 Bottle 没有任何意义。
手动添加换行符:
return template(
"<p>{{text}}</p>\n"
"% demo = 'hello world'\n"
"<p>{{demo}}</p>",
text=text
)
作为旁注,您可以使用 implicit string literal concatenation(如上面的代码所示)。
我正在调试应用程序并想使用瓶子 SimpleTemplate 来呈现 HTML 和 Python。如果我将模板用作单独的文件 (views/simple.tpl),则 Python 会正确呈现。
如果我尝试将 Python 作为字符串传递,我会得到 NameError("name 'demo' is not defined",)
from bottle import template
text = "debugging"
return template(
"<p>{{text}}</p>" +
"% demo = 'hello world'" +
"<p>{{demo}}</p>",
text=text
)
这可能吗?
嵌入 Python 代码的行必须以 %
开头。问题是您使用的是字符串连接,它不保留换行符。简单地说,该字符串相当于以下行:
<p>{{text}}</p>% demo = 'hello world'<p>{{demo}}</p>
因为 %
不是第一个字符,所以它对 Bottle 没有任何意义。
手动添加换行符:
return template(
"<p>{{text}}</p>\n"
"% demo = 'hello world'\n"
"<p>{{demo}}</p>",
text=text
)
作为旁注,您可以使用 implicit string literal concatenation(如上面的代码所示)。