模板与编码HTML

时间:2010-06-11 22:48:01

标签: python html templates

我有一个网络应用程序,包含一些用于维护某些表的html表单(SQlite,其中包含用于Web服务器的CherryPy)。首先,我完全采用“Python方式”,并通过生成html字符串。代码,具有公共页眉,页脚等,在单独的模块中定义为函数。

我也喜欢模板的想法,所以我尝试了Jinja2,我发现它非常适合开发人员。一开始我认为模板是要走的路,但那是页面很简单的时候。引入.css和.js文件后(不一定与.html文件位于同一文件夹中),并引入了越来越多的{{...}}变量和{%...%}命令,事情在设计时开始变得混乱,尽管它们在运行时看起来很棒。当我在或部分中需要额外的javascript时,事情变得更加困难。

据我所知,使用模板的主要优点是:    在设计过程中,可以在浏览器中轻松查看页面的非动态元素。    除了{}占位符之外,html与python代码分开。    如果您的公司有网页设计师,他们仍然可以在不知道Python的情况下进行设计。

虽然有些缺点是:    在设计时在浏览器中查看时,{{}}分隔符可见    关联的.css和.js文件必须位于同一文件夹中才能在设计时在浏览器中查看效果。    数据,变量,列表等必须在高级中准备并全局声明或作为参数传递给render()函数。

那么 - 什么时候使用'硬编码'HTML,何时使用模板?我不确定最好的方法,所以我很想听听其他开发者的意见。

TIA,艾伦

5 个答案:

答案 0 :(得分:5)

虽然我不是python开发人员,但我会在这里回答 - 我相信使用模板的想法在PHP和Python中很常见。

使用模板有很多很多冒险,比如

  • 保持代码清洁。将“逻辑”(控制器)代码与“视图”分开是非常重要的,相信我处理混合HTML / CSS / JS输出的项目真的很难。
  • 将HTML保存在单独的文件中不需要您修改代码本身。例如,放入控制器代码(python代码)可能需要在每个“字符”之前加上斜杠。
  • 你可以让你的webdesigner学习模板语法的基础知识,这样他就可以帮助你,而不会破坏你的逻辑工作(当没有给定语言经验的人修改某些东西时这种情况很常见)。
事实上,还有更多的冒险,但这些对我来说最重要。

只有 的缺点是你必须将参数传递给渲染函数...这不需要太多的工作,相信我:)无论如何,它比维护任何混合的项目容易得多视图中的逻辑。

一般来说,你应该看看> MVC的利弊问题< : What is MVC and what are the advantages of it?

答案 1 :(得分:4)

解决静态文件问题的最简单方法是在html中引用它们时使用相对路径。例如:<img src="static/image.jpg" />

如果您愿意加入的更多工作,可以通过编写迷你服务器来解决您提到的所有设计时问题,以显示模板。

  1. 维护一个包含所有模板示例值的简单数据结构的文件。
  2. 使用Werkzeug等微框架在本地计算机上提供http。
  3. 编写一个根请求处理程序,用于扫描数据结构列表或模板目录,以生成包含指向所有模板的链接的索引页。
  4. 为非root请求编写辅助请求处理程序,该请求处理程序使用相同名称的数据结构呈现所请求的模板。
  5. 您可以在几个小时内编写此工具,这使得模板设计非常方便。 Werkzeug内置的wsgi服务器的一个很好的功能是它可以在检测到文件发生变化时自动重新加载。您可以在编辑模板时使小型服务器保持运行,并在整个索引页面上单击链接。

答案 2 :(得分:1)

我强烈建议您使用模板。模板有助于为您的应用程序鼓励良好的MVC结构。发出HTML的蟒蛇代码,恕我直言,是错误的。我之所以这么说是因为Python代码应该负责做逻辑而不必担心演示。模板语法通常具有足够的限制性,你不能在模板中真正做很多逻辑,但你可以做任何你可能需要的特定于表示的类型逻辑。

因人而异。

答案 3 :(得分:1)

我认为模板仍然是将表示与业务逻辑分离的最佳方式。关键是一个很好的模板引擎,特别是可以在模板本身做出决策的引擎。对于Python,我发现Genshi模板引擎非常好。它由Trac Wiki / Issue跟踪系统使用,功能非常强大,同时仍然可以轻松使用模板。

对于其他任务,我倾向于使用BeautifulSoup模块。我将创建一个简单的HTML页面,使用BeautifulSoup解析它,使用生成的对象添加必要的数据,然后将输出写入其目标(通常是我的文件)。

答案 4 :(得分:1)

作为一名Seaside开发人员,如果你的设计师可以做css,我认为模板没用。在实践中,我发现不可能保留模板DRY。请查看this question,了解使用代码(DSL)生成页面的优势。当然,你可能受到遗产的约束。

Web应用程序中的表示(html)和业务逻辑的分离不会导致良好的模块化,即低耦合和高内聚。这就是为什么单独的模板系统不能正常工作的原因。

我刚读过Jeff Atwoods“CSS错误的原因”。这又是一个问题,在具有Phantasia DSL

的smalltalk世界中长期解决了