有没有可以进行“部分渲染”的python模板库?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了有没有可以进行“部分渲染”的python模板库?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2538字,纯文字阅读大概需要4分钟。
内容图文
![有没有可以进行“部分渲染”的python模板库?](/upload/InfoBanner/zyjiaocheng/823/d95638a803d84dc599efff01fd80ad33.jpg)
可以说我有以下模板:
<!DOCTYPE html>
<html>
{{ var1 }}
{% if var1 and var2 %}
<span>some text</span>
{% endif %}
{{ var2 }}
</html>
当我使用var1 = 3作为上下文渲染它时,它会产生以下输出:
<!DOCTYPE html>
<html>
3
{% if 3 and var2 %}
<span>some text</span>
{% endif %}
{{ var2 }}
</html>
当我再次使用var2 = 5渲染第一个渲染的输出作为上下文时,输出为:
<!DOCTYPE html>
<html>
3
<span>some text</span>
5
</html>
问题是大多数模板引擎会将上下文中缺失的变量评估为空字符串.这些都是在假设只有一个渲染的情况下构建的.
我知道jinja2可以用这种方法做到这一点:Multiple renders of jinja2 templates?
但它在if语句中不起作用,它只适用于单个变量.
是否有任何流行的模板库具有我描述的渲染模式?马可?元史?别的什么?也许这是一个非python模板引擎吗?
解决方法:
TL; DR
我所知道的任何模板语言都不存在此功能.您最好的选择是:
>使用this SO question来解决问题
>编写自己的模板标签(见下文)
编写自己的模板标签
我想你在这里有几个选项,其中一些是我从here开始的,虽然它们都没有涉及模板系统的内置功能.基本上,这里的目标是让渲染输出包含再次呈现的模板标记.
在我看来,最简单的方法是使用templatetag模板标签或编写自己做类似的东西,并负责转义.
如果你可靠地首先渲染var1并且var2秒:
<!DOCTYPE html>
<html>
{{ var1 }}
{% templatetag openblock %} if {{ var1 }} and var2 {% templatetag closeblock %}
<span>some text</span>
{% templatetag openblock %} endif {% templatetag closeblock %}
{% templatetag openvariable %} var2 {% templatetag closevariable %}
</html>
在第一次渲染时,你会得到:
<!DOCTYPE html>
<html>
{{ 3 }}
{% if 3 and var2 %}
<span>some text</span>
{% endif %}
{{ var2 }}
</html>
在第二次渲染时,会产生您想要的输出.
显然,不断编写多层{%templatetag%}会是一个巨大的痛苦,所以我建议你编写自己的递归模板标签,为你解决这个问题,可能有一个参数指定了多少层嵌套你需要,然后显然是输入本身的一个参数.关于这一点的好处是如果你只需要一层嵌套,只需输出模板标签输入即可,
基本上,通过递归地使用这个自定义模板标签输出,您可以非常容易地实现尽可能多的嵌套层.假设标签被实现为{%t<嵌套层> <输入> %}:
Initial template: {% t 2 "{{ var2 }}" %} First rendering: {% t 1 "{{ var2 }}" %} Second rendering: {{ var2 }} Final rendering: 5
现在,对于某些更复杂的标记,例如{%if%},这肯定会更加困难,特别是如果在您的示例中,您在单个if语句中需要多层渲染.你可能最好在这里拆分你的if语句,这样你就可以有更清晰的渲染分离.以下示例假定{%t%}标记的实现,其中{%t%} / {%endt%}组合:
初始HTML:
{% if var1 %}
{% t 1 %}
{% if var2 %}
<span>some text</span>
{% endif %}
{% endt %}
{% endif %}
首先渲染:
{# Note that the first if statement has been evaluated and is gone #}
{% if var2 %}
<span>some text</span>
{% endif %}
最终渲染:
<span>some text</span>
内容总结
以上是互联网集市为您收集整理的有没有可以进行“部分渲染”的python模板库?全部内容,希望文章能够帮你解决有没有可以进行“部分渲染”的python模板库?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。