2024-04-20 10:21:52 发布
网友
假设我在一个变量X中有实际的jinja模板代码,我们假设X的内容是{{some{other}。
如何既显示X又呈现其内容?
例如,这不起作用:
{{X}
因为它只是将其呈现为屏幕“{{some{some戋other戋variable}”,而不是某个戋other戋variable的内容。
我这样做的原因是我有一个站点,在这个站点中(受信任的)用户可以创建自己可能包含jinja模板代码的帖子。视图页面显示这些文章,但是由于上述问题,直接呈现它们,而不是像我希望的那样替换变量。
我想到了一个有趣的方法:
include
还没试过,不过可能会成功!
我找不到一个好的方法来做这个嵌套渲染,但是,我可能会尝试建议一个替代方案:
由于用户创建了posts,我认为“{{some{some{other}variable}”实际上是整个post的子字符串,也是一个字符串。
我会做:
X.replace("{{some_other_variable}}", some_other_variable))
然后按正常返回{{X}。这能满足你的要求吗?
我知道现在有点晚了:)但是这里有一个不影响模板代码的解决方案:
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
试运行:
>>> recursive_render("Hello {{X}}!", dict(X="{{name}}", name="world")) u'Hello world!'
注意,这不是很有效,因为模板必须在每次迭代时从头开始重新解析。
我想到了一个有趣的方法:
include
指令在当前上下文中调用模板代码还没试过,不过可能会成功!
我找不到一个好的方法来做这个嵌套渲染,但是,我可能会尝试建议一个替代方案:
由于用户创建了posts,我认为“{{some{some{other}variable}”实际上是整个post的子字符串,也是一个字符串。
我会做:
然后按正常返回{{X}。这能满足你的要求吗?
我知道现在有点晚了:)但是这里有一个不影响模板代码的解决方案:
试运行:
注意,这不是很有效,因为模板必须在每次迭代时从头开始重新解析。
相关问题 更多 >
编程相关推荐