假设我在变量X中有实际的jinja模板代码.让我们说X的内容是"{{some_other_variable}}".
如何在呈现内容的同时显示X?
例如,这不起作用:
{{ X }}
因为它只是将其渲染为"{{some_other_variable}}"而不是some_other_variable的内容.
我这样做的原因是我有一个网站,其中(可信的)用户可以创建自己可能包含jinja模板代码的帖子.视图页面显示这些帖子,但由于上述问题,直接呈现它们,而不是按照我的意愿替换变量.
小智 6
我知道这有点晚了:),但这是一个不影响模板代码的解决方案:
import jinja2
def recursive_render(tpl, values):
prev = tpl
while True:
curr = jinja2.Template(prev).render(**values)
if curr != prev:
prev = curr
else:
return curr
Run Code Online (Sandbox Code Playgroud)
测试运行:
>>> recursive_render("Hello {{X}}!", dict(X="{{name}}", name="world"))
u'Hello world!'
Run Code Online (Sandbox Code Playgroud)
请注意,这不是非常有效,因为必须在每次迭代中从头开始重新分析模板。
我找不到执行此嵌套渲染的好方法,但是,我可能会尝试建议替代方案:
由于用户创建了帖子,我想“{{some_other_variable}}”实际上是整个帖子的子字符串,这也是一个字符串。
我会做:
X.replace("{{some_other_variable}}", some_other_variable))
Run Code Online (Sandbox Code Playgroud)
然后正常返回 {{X}}。这能满足你想做的事情吗?
| 归档时间: |
|
| 查看次数: |
5488 次 |
| 最近记录: |