类似于Thymeleaf的"自然模板"的模板解决方案,适用于Jinja2/Python/Django吗?

7
我使用 ,并且对它感到满意。只是我希望能够与前端程序员协作,让他无需运行整个堆栈就能处理CSS和HTML。
理想情况是当不使用后端时,模板可以呈现虚拟数据而不是动态数据,这样设计师就可以仅使用浏览器和开发环境来处理图形和布局。
Java有一个模板引擎,即使它们具有从后端和框架获取数据的标签,也可以将模板呈现为纯html。
是否有类似于jinja2、django或python的东西?

1
维基百科https://en.wikipedia.org/wiki/Comparison_of_web_template_engines将jinja2列为支持自然模板的模板引擎。这不正确吗? - Alex R
2个回答

2

模板属性语言(TAL)& Zope页面模板(ZPT)

我不确定这是什么时候出现的,但我已经监测了这个领域几年了,今天是我第一次注意到有一个Python版本的TAL,我在几年前遇到过PHPTAL,它非常类似于Thymeleaf。

示例代码:

<p tal:content="user/getUserName">Placeholder</p>

<table>
  <tr tal:repeat="item context/cart">
    <td tal:content="repeat/item/number">1</td>
    <td tal:content="item/description">Widget</td>
    <td tal:content="item/price">$1.50</td>
  </tr>
</table>

更多示例请参见https://pagetemplates.readthedocs.io/en/latest/tal.html

Python中TAL的参考实现可通过以下方式进行安装:

pip install zope.pagetemplate

还有其他实现方式,包括面向性能的分支和移植到其他编程语言的版本。


谢谢,我会跟着链接。 - Niklas Rosencrantz

1
我会说,Python中没有类似于Thymeleaf的等效工具。正如Alex R提到的,维基百科将jinja2列为自然模板引擎。从语法角度来看,这是正确的,但并不适用于您所描述的用例。
下面的jinja2 HTML模板是有效的HTML:
<!DOCTYPE html>
<html>
  <head>
    <title>{{ variable|escape }}</title>
  </head>
  <body>
    <h1>List of elements</h1>
    <ol>
  {%- for item in item_list %}
      <li>{{ item }}{% if not loop.last %},{% endif %}</li>
  {%- endfor %}
    </ol>
  </body>
</html>

但它会在浏览器中显示所有jinja2部分:

元素列表

    {%- for item in item_list %}
  1. {{ item }}{% if not loop.last %},{% endif %}
  2. {%- endfor %}

对于前端开发人员来说,这可能不如thymeleaf中相应结果方便:

<!DOCTYPE html>
<html>
  <head>
    <title data-th-text="#{page.title}">Dummy Title</title>
  </head>
  <body>
    <h1>List of elements</h1>
    <ol data-th-each="item : ${items}">
      <li data-th-text="${item}">Dummy Element</li>
    </ol>
  </body>
</html>

结果:

元素列表

  1. 虚拟元素

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接