Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较web.py';s Templator和Jinja2:优势和劣势_Python_Templates_Web.py_Jinja2 - Fatal编程技术网

Python 比较web.py';s Templator和Jinja2:优势和劣势

Python 比较web.py';s Templator和Jinja2:优势和劣势,python,templates,web.py,jinja2,Python,Templates,Web.py,Jinja2,我正在为一个已经存在的软件添加一个简单的web界面;py正好适合这份工作,这就是我正在使用的。现在,我正在研究使用什么样的模板引擎,并总结出两种选择:要么使用web.py自己的模板,要么使用Jinja2 我已经在应用程序中使用了这两个工具,我正在用这两个工具编写一些非常简单的模板来探索它们。我必须说,我觉得Templator更容易阅读,这可能是因为我是一名程序员,而不是一名网页设计师(谁会觉得Jinja更容易?) 虽然我现在只生成(不兼容的;)丑陋的HTML页面,但我还将使用模板引擎生成电子邮件

我正在为一个已经存在的软件添加一个简单的web界面;py正好适合这份工作,这就是我正在使用的。现在,我正在研究使用什么样的模板引擎,并总结出两种选择:要么使用web.py自己的模板,要么使用Jinja2

我已经在应用程序中使用了这两个工具,我正在用这两个工具编写一些非常简单的模板来探索它们。我必须说,我觉得Templator更容易阅读,这可能是因为我是一名程序员,而不是一名网页设计师(谁会觉得Jinja更容易?)

虽然我现在只生成(不兼容的;)丑陋的HTML页面,但我还将使用模板引擎生成电子邮件和良好的旧纯文本文件

这两种软件对于任何实际用途来说都“足够快”,我想问那些广泛使用其中一种或两种软件的人,他们在易用性、代码清洁度、灵活性等方面的优势和劣势是什么。

快速查看(我从未使用过)并将其与(我已经广泛地使用了这一点),我想说这两者非常相似……但是Templator更接近于Jinja而不是Jinja

Mako和Jinja都支持:

  • 模板继承(您可以拥有一个所有页面都继承自的布局)
  • 空白控制
而Mako和Templator都支持:

  • 在模板中嵌入“安全”Python
所有三个方面都支持:

  • 添加到模板上下文(函数、对象、变量、作品)
  • 定义函数以封装模板中可重用的功能(Jinja称之为“宏”)
  • 条件与循环
  • 设置和获取局部变量
  • 表达式求值
  • 缓存编译后的字节码以加快将来的执行
圣堂武士支持奇怪的事情,我不相信金贾或Mako会这样做:

  • 在模板代码中设置已编译模板对象的属性。(坦率地说,实际上使用该功能似乎是错误的。模板可以确定的任何标志都需要根据上下文传递的内容进行设置,应用程序代码应该已经设置了这些标志。)
Jinja获取模板代码并将其编译为Python字节码,但它对所有内容都是这样做的,而不是通过字符串传递给Python解释器以使用
safe\u eval
。通过这样做,Jinja2理论上不会受到模板级别的某些类型的攻击(但当模板中有恶意输入时,通常会出现更大的问题)

至于其余部分,这完全取决于您对语法的偏好。

快速查看(我从未使用过)并将其与(我已经广泛使用过)进行比较,我认为两者非常相似……但Templator更接近于Jinja

Mako和Jinja都支持:

  • 模板继承(您可以拥有一个所有页面都继承自的布局)
  • 空白控制
而Mako和Templator都支持:

  • 在模板中嵌入“安全”Python
所有三个方面都支持:

  • 添加到模板上下文(函数、对象、变量、作品)
  • 定义函数以封装模板中可重用的功能(Jinja称之为“宏”)
  • 条件与循环
  • 设置和获取局部变量
  • 表达式求值
  • 缓存编译后的字节码以加快将来的执行
圣堂武士支持奇怪的事情,我不相信金贾或Mako会这样做:

  • 在模板代码中设置已编译模板对象的属性。(坦率地说,实际上使用该功能似乎是错误的。模板可以确定的任何标志都需要根据上下文传递的内容进行设置,应用程序代码应该已经设置了这些标志。)
Jinja获取模板代码并将其编译为Python字节码,但它对所有内容都是这样做的,而不是通过字符串传递给Python解释器以使用
safe\u eval
。通过这样做,Jinja2理论上不会受到模板级别的某些类型的攻击(但当模板中有恶意输入时,通常会出现更大的问题)


至于剩下的部分,这完全取决于你对语法的偏好。

在Templetor中对我来说很难的是模板继承。与Jinja2中存在的简单块概念不同,你必须在应用程序代码中选择一次基本模板,然后在访问时在实际模板中进行奇怪的属性设置如果你需要多个像页面主体这样的“大”块,你仍然会遇到问题


真正的积木要优雅得多,Templetor的“真正”积木的灵活性Python并不是真正必要的,但它可能不安全。

在Templetor中对我来说困难的是模板继承。与Jinja2中存在的简单块概念不同,你必须在应用程序代码中选择一次基本模板,然后在实际模板中进行奇怪的属性设置,同时在基本模板中访问它如果你需要不止一个像页面主体这样的“大”块,你仍然会遇到问题


真正的块要优雅得多,Templetor的“真正的”Python的灵活性并不是真正必要的,但它可能是不安全的。

Jinja2提供了一个[沙盒][允许执行不受信任的代码。@Daslch-绝对正确!我之所以区分Jinja和Mako是因为(我相信)在沙盒模式和普通模式下,Jinja2都不会将任何模板代码视为Python代码——我使用的每个构造