Ophelia可以从TAL模板中构建网站,零代码重复。
项目描述
Ophelia – 从模板中构建网站,零代码重复
Ophelia从TAL(Zope模板属性语言)编写的模板创建XHTML页面。它旨在将代码重复减少到零。
Ophelia是一个WSGI应用。该软件包包括一个基于wsgiref的服务器,配置为运行Ophelia,以及一个用于与paster一起使用的应用工厂。
该软件包需要Python 2.6或2.7。
以下列出的文档文件可以在软件包目录中找到,包括模块的许多doctests。
入口点
您安装了Ophelia并编写了一些模板后,如何使其渲染网页?
- 将Ophelia作为WSGI应用使用
Ophelia定义了一个符合WSGI标准的应用类,PEP 333: ophelia.wsgi.Application。您可以通过运行Ophelia的自己的基于wsgiref的HTTP服务器,或者通过您可能想要使用的任何WSGI服务器来运行它。
- 尝试Ophelia附带基于wsgiref的服务器
安装了一个相当简单、不适合生产的基于wsgiref的服务器,用于使用提供的WSGI应用程序,作为名为ophelia-wsgiref的可执行文件。其脚本入口点是ophelia.wsgi.wsgiref_server。
使用--help选项调用脚本时,它会提供一些使用说明。它读取配置文件;有关详细信息,请参阅CONFIGURATION.txt。
- 使用paster将应用程序插入到WSGI服务器
Ophelia在ophelia.wsgi.Application.paste_app_factory提供了paste.app_factory#main入口点。这可以用来在任何可以读取paste“ini”文件的WSGI服务器中运行Ophelia。请参阅CONFIGURATION.txt以获取示例。
Ophelia适合哪些类型的网站?
静态内容
将Ophelia视为被药物增强的SSI。它本质上没有区别,只是更友好且功能更强大。
当您基本上自己编写HTML,但只需要一次编写重复内容时,请使用Ophelia。将重复减少到零的代价是:您的网站必须遵循Ophelia组合模板的正确模式。
请将您网站的布局视为分层:所有页面都有共同的样式,部分有特定的特征,每个页面都有独特的内容。对Ophelia来说,这种层次结构反映在您的文档的文件系统组织结构中是至关重要的;模板如何组合是从它们在目录层次结构中的位置推导出来的。
动态内容
Ophelia使Python语言可用于包含动态内容。每个模板文件都可以包含一个Python脚本。贡献同一页面的Python脚本和模板共享一组公共变量来修改和使用。
Ophelia的内容模型非常简单,如果每个发布的内容对象都是其自己的视图,效果最佳:它在页面上表示的内容。即使您从外部资源获取内容(例如,数据库或版本控制存储库),只要对象的不同视图不依赖于对象类型,甚至对象本身,您仍然可以使用Ophelia,即使每个内容对象有多个视图也是如此。
尝试在更复杂的网站上使用Ophelia会导致逻辑和展示之间的混乱。不要将Ophelia用于实际上是应用程序、内容管理系统等网站界面的网站。
Ophelia是如何工作的
模板文件
对于每个请求,Ophelia都会查找一些模板文件。它会从从网站根目录到页面的路径上的每个目录中获取一个名为“__init__”的文件,并为页面本身获取一个最终的文件。如果找到最终的模板,Ophelia将提供该请求。
在构建页面时,页面的模板被评估,其内容存储在所谓的内部槽中。然后,从页面到根目录的每个模板依次被评估,并可能包含内部槽的当前内容。结果在每一步之后都存储在内部槽中。
处理根模板的结果被作为页面提供。
Python脚本
每个模板文件都可以从Python脚本开始。在这种情况下,脚本通过其自己的行上的第一个“<?xml?>”标签(除了左右留下的空白)与模板分开。如果模板文件只包含Python脚本而没有实际的模板,请在它的最后一行放置“<?xml?>”。
Python脚本在从网站根目录到页面的遍历过程中按顺序执行。它们在随后用作模板评估上下文的同一变量命名空间中运行。由Python脚本设置的变量可以被随后运行的任何脚本以及模板中使用的TALES表达式使用和修改。
命名空间由Ophelia使用一个变量初始化,该变量为__request__,它引用请求对象。因此,脚本可以访问请求细节和遍历内部。除了设置变量外,脚本还可以导入模块、定义函数、访问文件系统,以及通常可以做的任何Python程序的事情。
磁盘上的文档
通常,一个网站将包含无法从上述模板组装的文档。这些是像图像、javascript文件和样式表这样的资产,以及例如可能由某些其他系统(如源代码文档生成器)导出的页面。
为了将此类内容混合到Ophelia生成的网站的URL空间中,模板层次结构必须省略相关路径,并且第二个目录层次结构需要直接对应URL空间的需求,以包含从磁盘提供的文档。如果Ophelia发现它无法使用模板提供服务,则将回退到磁盘上的文档。只有在后者不包含与请求的URL对应的文件时,才会发送“404 Not found”错误响应。
Ophelia的行为方式
URL规范化与重定向
如果Ophelia遇到一个对应的目录的URL,其行为与Apache的默认配置类似:如果URL不以斜杠结尾,它将重定向浏览器添加斜杠。如果斜杠已经存在,它将默认尝试找到名为index.html的模板,并将其作为“index”目录渲染。
根据配置,对目录索引页面的明确请求可能会被重定向到不带末尾路径段的裸目录URL。这将把 <http://www.example.com/index.html> 转换为 <http://www.example.com/>。
此外,Ophelia根据RFC 3986中关于通用URI语法的规范对包含路径段“.”和“..”的URL进行规范化,并移除路径末尾之外的非空路径段。如果URL因这些规则而更改,Ophelia将相应地重定向浏览器。
模板和脚本中使用的语言和API
有关Python语言的信息,请参阅 <https://docs.pythonlang.cn/>。
有关模板属性语言的信息,请参阅 <http://wiki.zope.org/ZPT/TAL>。
有关WSGI(Web服务器网关接口),请参阅 <https://pythonlang.cn/dev/peps/pep-0333/>。
有关Ophelia API、预定义脚本和模板变量,请参阅API.txt。
关于Ophelia
- 作者:
- 网络主页:
- 在线文档:
http://packages.python.org/ophelia/ 和 http://ophelia.readthedocs.org/
- PyPI页面:
- 问题跟踪器:
- 源代码:
https://bitbucket.org/tlotze/ophelia/ 和 https://github.com/tlotze/ophelia
- 当前变更日志:
- 支持项目:
通过Paypal向 <thomas@thomas-lotze.de> 捐款。
项目详情
ophelia-0.4.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f63b8ee6e06256cc68fcdcec52322dbfeb19781301bbd178bf73dbfe746db6c8 |
|
MD5 | ce9b3da6d63a1ce3ac8dd7df1d1bb919 |
|
BLAKE2b-256 | 703ce39486f25ec22909a56324d0fb1c0c82b14d72c964cc4c100d32e653398b |