在 Jinja2 中使用 DOT 渲染字符串时的奇怪行为
Odd behavior when rendering string with DOT in Jinja2
这是我的代码:
file = 'http://www.example.com/cdn/.eJwdyjsKksjdbf-sjhdfb-kajsfbnksj'
link = '%s/cdn/%s' % (self.base_url, file)
app.log.debug('link is: %s' % link)
return template.render(link_text=link_text, link=link)
此处日志输出如下:
2016-06-22 05:37:23,268 - app:log - DEBUG - 330 - 106622 - Thread-6 - link is: http://www.example.com/cdn/.eJwdyjsKksjdbf-sjhdfb-kajsfbnkshdbhj
但是 link 部分的 template.render
的输出是:
<div height=\"40px\" style=\"width: 189px; height: 43px; line-height: 40px; background-color: #5c9eef; border-radius: 4px; text-align: center;\">\n
<a href=\"http://www.example.com/cdn/\" style=\"text-decoration: none; font-weight: 300; line-height: 42px; font-family: tahoma; font-size: 15px;
letter-spacing: 1px; color: #fff;\">Download File</a>\n
生成的 link 缺少带有 .
的部分!这是否意味着 jinja2
在这个角色上表现得很奇怪?!我能做些什么来解决这个问题吗?
您需要将 html 标记为安全,否则 Jinja 会执行自动转义。这很简单:
from jinja import Markup
...
return template.render(link_text=link_text, link=Markup(link))
另一种方法是从 html 模板本身 - 只需将变量标记为安全即可:
{{ my_variable | safe }}
这是我的代码:
file = 'http://www.example.com/cdn/.eJwdyjsKksjdbf-sjhdfb-kajsfbnksj'
link = '%s/cdn/%s' % (self.base_url, file)
app.log.debug('link is: %s' % link)
return template.render(link_text=link_text, link=link)
此处日志输出如下:
2016-06-22 05:37:23,268 - app:log - DEBUG - 330 - 106622 - Thread-6 - link is: http://www.example.com/cdn/.eJwdyjsKksjdbf-sjhdfb-kajsfbnkshdbhj
但是 link 部分的 template.render
的输出是:
<div height=\"40px\" style=\"width: 189px; height: 43px; line-height: 40px; background-color: #5c9eef; border-radius: 4px; text-align: center;\">\n
<a href=\"http://www.example.com/cdn/\" style=\"text-decoration: none; font-weight: 300; line-height: 42px; font-family: tahoma; font-size: 15px;
letter-spacing: 1px; color: #fff;\">Download File</a>\n
生成的 link 缺少带有 .
的部分!这是否意味着 jinja2
在这个角色上表现得很奇怪?!我能做些什么来解决这个问题吗?
您需要将 html 标记为安全,否则 Jinja 会执行自动转义。这很简单:
from jinja import Markup
...
return template.render(link_text=link_text, link=Markup(link))
另一种方法是从 html 模板本身 - 只需将变量标记为安全即可:
{{ my_variable | safe }}